mysql中列属性
mysql列属性包括:NULL 、default、comment、primary key、unique key
一、NULL
定义方式:NULL(默认) NOT NULL
空属性有2个值,mysql数据库默认字段都是为null的,但是在实际开发过程中,尽可能保证所有的数据都不应该为null,空数据没有意义,任何参与NULL运算的结果都是NULL。
二、comment
列描述(comment),又可以称之为注释,实际没有什么含义,是专门用来描述字段的,会根据创建语句保存,用来给程序员(或者数据库管理员)来进行了解的。主要用于查看创建表的语法上进行查看,可用show create table tb_name;语句查看
create table my_tab(
str varchar(10) not null comment '描述信息',
num int unsigned not null comment '描述信息'
);
三、default
用来设置默认值。某一种数据会经常的出现某个具体值,可以在一开始指定好,在需要真实数据的时候,用户可以选择性地使用默认值。
create table my_tab(
str varchar(10) not null,
num int unsigned default 10; #默认值为10
);
使用方法:
insert into my_tab (str) values ('abc'); #num会自动设为10
insert into my_tab values ('abc', default); #用默认值插入num字段
四、primary key (主键)
主键约束: 主键对应的字段中的数据不允许重复,一旦重复,操作失败。
1. 主键特点
① 唯一性,一张表只能有一个字段设为主键
② 主键不允许为NULL
2. 增加主键方式,常用的有3种
① 在创建表时,在字段后面跟关键字primary key设置
create table my_tab(
id int primary key, #第一种方式
name varchar(10)
)charset utf8;
② 在创建表时,在所有字段后使用primary key(字段列表)设置复合主键
create table my_tab2(
id int,
number int,
name varchar(10),
primary key(id, number, ...) #第二种方式,这种方式是符合主键,比较特殊
)charset utf8;
复合主键:
在创建表的时候,在所有的字段之后,使用primay key(主键字段列表)来创建主键(可以有多个字段作为主键)来创建复合主键。
语法:primary key(字段1,字段2......)
例子:创建一张my_primark_key2的表,为其添加number字段(int类型)和classname 字段(varchar类型),将这个2字段添加成复合主键。
create table if not exists my_primary_key2(
number int not null,
classname varchar(20) not null,
primary key(number,classname) #符合主键
)charset utf8;
插入数据:插入数据只有两个字段(number,name)共同重复时才会插入失败,如果有1个字段重复,另一个字段不重复,那么会插入成功。
③ 在已创建好的表中追加主键
alter table my_tab3 modify id int primary key; #第三种方式
alter table my_tab3 add primary key(id, ...);
3. 主键更新与删除
主键无法更新,若想更新主键,只能删除后重新添加!!!!
alter table my_tab3 drop primary key;
五、auto_increment -- 自动增长
1. 自动增长通常与主键搭配使用, 字段设置自动增长后,不给值,或给默认值或NULL的时候,会自动触发,如果给了值,则当前自增失效,从下一次开始以当前最大值开始自增。
设置为自增长的字段必须是一个索引,且必须是一个整型类型,一张表只能有一个字段被设为auto_increment !!!!
自增长的特点 :
a)、任何一个字段做自增长前提:该字段必须是一个索引字段(key一栏有值)。
b)、自增长字段通常是整形。
c)、一个表中只能有1个自增长字段。
示例:
添加一张my_auto_increment的表,为其添加id字段和name字段,其中id字段设置成主键和自增长。
create table if not exists my_auto_increment(
id int primary key auto_increment, #配合主键使用,自增长
name varchar(10) not null
)charset utf8;
插入值:
insert into my_auto_increment values(null,'张三'); #有效,给与空值null的形式,这种形式最为方便
insert into my_auto_increment(name) values('李四'); #有效,不给值的形式,如果不给值,表名后必须指定哪些字段要给值
如果对应的自增长字段输入了值,那么自增长失效,但是下一次还是能够正确的自增长(从最大值+1)。
insert into my_auto_increment values(10,'王五');
再次插入数据的时候,自增长就会从11开始:
insert into my_auto_increment values(null,'赵六');
自增长如果是涉及到字段改变,必须先删除自增长,后增加,一张表中只能有1个自增长。
修改当前已存在自增长的值,修改只能比当前已有的自增长的最大值大,不能小(小则不生效)。
update my_auto_increment set id = 20 where name = '赵六'; #将姓名为赵六的id修改成20,仅仅是更新数据,因此下一次自增长值是12
再次插入数据,自增长就会从12开始,而不是从21,注意insert和update操作后效果的不同:
insert into my_auto_increment values(null,'甜七');
alter table my_tab4 auto_increment = 20; #仅修改单张表的起始值,下一次插入数据自增长从20开始
删除自增增长:
自增长是字段的一个属性,可以通过modify属性来修改(字段没有自增长)。
语法:alter table 表名字 modify 字段名 数据类型
例子:将my_auto_Increment表中 id字段的自增长去掉。
alter table my_auto_increment modify id int;
自增长为什么从1开始?又为什么每次都是自增1呢?
所有系统的表现(如字符集、校对集)都是由系统的内部变量进行控制的。
查看自增长对应的变量的语法:show variables like 'auto_increment%';
mysql> show variables like '%auto_increment%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 1 | #步长
| auto_increment_offset | 1 | #起始值
+--------------------------+-------+
可以修改变量实现不同的效果。如果对整个数据库修改(而不是一张表),这种方式是修改时会话级(当前客户端,当此连接有效,关闭失效)。
修改成一次自增为5。
set auto_increment_increment = 5; #表示一次自增5
2. 使用方式,在字段后面跟auto_increment关键字
create table my_tab4(
id int auto_increment, #自增长,这里没有配个主键使用
name varchar(10)
)charset utf8;
. 修改自增长
alter table my_tab4 auto_increment = 值; #如果改的值比当前最大值小,则修改无效
. 查看系统自增长变量
show variables like '%auto_increment%';
可以修改系统变量的值, 但是没什么意义
set auto_increment_increment = 值; #修改自增步长
5. 删除自增长
alter table my_tab1 modify id int; #修改字段,使其没有auto_increment即可。
六、unique key 唯一键
一张表往往有很多字段需要具有唯一性,数据不能重复(但可以为null,不像主键),这个时候用唯一键(unique)就体现出其优势了,可以解决表中多个字段需要唯一性约束的问题。
唯一键的本质与主键的性质差不多,唯一键默认的允许字段为空,而且可以多个字段为空(空字段不参与唯一性比较)!!!!
特点:
1. 唯一键允许自动为NULL,且可以有多个。如果当前表中没有主键,并有唯一键设为NOT NULL时,会显示第一个NOT NULL的唯一键为PRI,但他本质是唯一键!!!
因此使用desc 表名 查看某字段显示为pri的字段不一定是主键,如果该字段是一个不为空的唯一键,也会显示为Pri,可通过show create table 查看真伪
2. 增加唯一键:有3种方式
语法: 字段名 数据类型 unique/unique key
① 在创建时在字段后面跟关键字unique/unique key
create table my_unique1(
id int unique, #唯一键
num int unique key, #唯一键
name varchar(10)
)charset utf8;
② 在创建时在所有字段后面增加 unique key(字段列表) ,复合唯一键MUL
create table my_unique2(
id int,
num int,
name varchar(10)
unique key(id, num) #唯一键,类似于主键,这种形式也称之为复合唯一键
)charset utf8;
③ 在表创建之后追加唯一键
alter table my_unique3 add unique key(字段列表); #unique key 或 unique 都可以
alter table my_unique3 modify 字段名 数据类型 unique; #修改已经存在的字段为唯一键
3. 更新与删除唯一键
和主键一样,先删除后添加,因为唯一键可以有多个,所以不删除直接添加也可以!!!!!
alter table my_unique drop index 索引名; #唯一键默认使用字段名作为索引名字
从以上可知唯一键和主键都是索引!!!
七、索引
索引的作用: 提高查询效率、约束数据的有效性
1. 主键索引 primary key
2. 唯一键索引 unique key
3. 全文索引 textfull index
4. 普通索引 index
mysql中列属性的更多相关文章
- mysql更改列属性的一些用法
更改mysql 主键属性 alter table rbac_auth change column id id int auto_increment
- mysql中列的增删改
增加列: ); ) after id; ) first; 修改列名: ); #change可改名字与字段类型 mysql> alter table a change uid uid int; Q ...
- 【mysql】mysql中varcher属性最大值能存多长
1.首先理解varchar(n),n表示什么 MySQL5.0.3之前varchar(n)这里的n表示字节数 MySQL5.0.3之后varchar(n)这里的n表示字符数,比如varchar(200 ...
- MySQL中列别名为中文时,Order by 子句中使用别名时不要加引号
暂时还不清楚原因 1.按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩 SC表: 这里,当做总成绩处理 select sid, sum(score) as '总成绩', avg(score) ...
- mysql中列转行
通过group_concat()函数来实现 select group_concat(name) from table group by type select group_concat(name se ...
- MySQL中不允许使用列别名作为查询条件
在MySQL中有个特殊的规定,即不允许使用列别名作为查询条件.比如有下面一个表: select ID, title, concept, conceptLength, ...
- MySQL中的视图详解
一.什么是视图? 简单来说,视图就是从一张表中导出的虚拟表.视图拥有表的结构,但是在数据库中只有视图的定义,但是没有视图中的数据. 视图是由查询语句从一张表中导出来的数据,不是一张实际的表. 二.视图 ...
- MySQL (二)-- 数据类型(列类型)、数值类型、 小数类型、 时间日期类型、 字符串类型 、 MySQL记录长度、列属性
1 数据类型(列类型) 所谓的数据类型:对数据进行统一的分类,从系统的角度出发是为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中将数据类型分成了三大类: 2 数值类型 数值类型数据:都 ...
- MySQL 中添加列、修改列以及删除列
ALTER TABLE:添加,修改,删除表的列,约束等表的定义. 查看列:desc 表名; 修改表名:alter table t_book rename to bbb; 添加列:); 删除列:alte ...
随机推荐
- PHP函数库(概览)
数组函数: array_change_key_case — 返回字符串键名全为小写或大写的数组 array_chunk — 将一个数组分割成多个 array_column — 返回数组中指定的一列 a ...
- CentOS7 安装oracle 客户端
参考 http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html 下载 oracle-instantclient11. ...
- winfrom C#树勾选等
AfterCheck /// <summary> /// 树勾选 /// </summary> /// <param name="sender"> ...
- C#继承 多态
1.继承 允许我们根据一个类来定义另一个类.已有的类被称为的基类(父类),新的类被称为派生类(子类). 单一继承:只能有一个基类,一个基类可以派生出多个派生类,一个类别只可以继承自一个父类. 多重继承 ...
- DotNetty 跨平台的网络通信库(转)
久以来,.Net开发人员都非常羡慕Java有Netty这样,高效,稳定又易用的网络通信基础框架.终于微软的Azure团队,使用C#实现的Netty的版本发布.不但使用了C#和.Net平台的技术特点,并 ...
- Flex Validator的小BUG
Flex中对同一控件如TextInput进行多种格式校验的情况下,如不注意,可能导致错误信息不显示的BUG,比如 <fx:Array id="validators"> ...
- Spring课程 Spring入门篇 3-3 Spring bean装配(上)之aware接口
课程链接: 本节主要介绍了以下内容: 1 aware介绍 2 代码演练 3 课程总结 1 aware介绍 1.1 为什么要使用aware? 在java类中,可以方便的获取xml配置文件中的bean的各 ...
- Windows和Linux执行Java代码的不同方式
一.Windows 下编译并执行 Java 字节码文件(类文件) 1.编译 Hello.java 源码文件: java -d . Hello.java 2.执行 Hello.class 字节码文件: ...
- js随堂初体验(一)
Js初体验(-) 1 js的基础知识 A web三大标准:1 html:结构标准 2 css:表现标准 3 javascript:行为标准 B js三种书写方式:1 行内js:onclick ...
- ArcGIS for Service中JavaScript预览在内网环境无法使用
1.问题说明 在使用ArcGIS for Service时经常会遇到一个问题,那就是我们需要对已经发布的服务进行预览,预览时点击对应服务,选择View in中的ArcGIS JavaScript就可在 ...