约束
我们在之前创建表的时候有提到过约束条件(constraint),他的作用就是用于约束表中的数据,例如非空性,唯一性等,约束的分类也很多有如下
中文 | 关键字 |
---|---|
主键约束 | primary key(PK) |
自增长约束 | auto_increment |
非空约束 | not null |
唯一性约束 | unique |
默认约束 | default |
零填充约束 | zerofill |
外键约束 | foreign key(FK) |
主键约束
主键约束(primary key)形象化的来理解就是使用某一列或者几列作为这个表的标识,可以提高表的查询速度,主键约束其实就相当于唯一约束加上非空约束的组合,不允许重复也不允许出现空值,而且每个表最多只有一个主键,当主键约束被创建时,系统默认会在所在的列和列组合上建立对应的唯一索引,这里也是简单理解为可以用于快速查询的功能
添加单列主键
创建单列主键有两种方式,一种是在定义字段的同时指定主键,一种是定义完字段之后指定主键
第一种
1 | create table 表名( |
例如
1 | create table emp1( |
第二种
1 | create table 表名( |
例如
1 | create table emp2( |
添加多列主键(联合主键)
所谓的联合主键,就是这个主键是由一张表中多个字段组成的。当主键是由多个字段组成时,就不能直接在字段名后面声明主键约束。而一张表只能有一个主键,联合主键也是一个主键
1 | create table 表名( |
例如
1 | create table emp3( |
修改表结构以添加主键
主键约束不仅可以在创建表的同时创建,也可以在修改表时添加
1 | create table 表名( |
例如
1 | create table emp4( |
删除主键约束
1 | alter table <数据表名> drop primary key; |
例如
1 | alter table emp1 drop primary key; |
自增长约束
这个约束就类似于序号,不需要用户自行赋值,数据库系统会自动进行增长,通过给字段添加相应关键字即可
1 | 字段名 数据类型 auto_increment |
例如
1 | create table t_user1( |
需要注意的是,初始值为1,每新增一条记录,字段会自动添加1,一个表中只能有一个自增长约束,并且该字段必须有唯一的索引,以避免重复,自增长字段也具有非空性,并且只能是整数类型,同时也受到数据大小的限制,当超出上限时会自动失效
那么我们也可以给定一个初始值,例如
1 | create table t_user2 ( |
或者
1 | create table t_user3 ( |
我们之前在讲delete和truncate可以删除表中的数据,delete数据之后自动增长从断点开始,也就是他的自增长是延续的,truncate数据之后自动增长从默认起始值开始,相当于重新标号
非空约束
非空约束(not null)就是这个字段的值不能为空,否则报错
1 | <字段名><数据类型> not null; |
例如
1 | create table t_user6 ( |
或者
1 | create table t_user7 ( |
删除
1 | -- alter table 表名 modify 字段 类型 |
唯一约束
唯一约束(Unique Key)就是这个字段的值不能重复出现
1 | <字段名> <数据类型> unique |
例如
1 | create table t_user8 ( |
1 | create table t_user9 ( |
删除
1 | -- alter table <表名> drop index <唯一约束名>; |
默认约束
默认约束(default)就是用来给字段指定默认值
1 | <字段名> <数据类型> default <默认值>; |
例如
1 | create table t_user10 ( |
1 | create table t_user11 ( |
删除
1 | alter table t_user11 modify column address varchar(20) default null; |
零填充约束
零填充约束(zerofill)会在插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面补上相应的0,默认为int(10),并且是无符号整数
1 | create table t_user12 ( |
删除
1 | alter table t_user12 modify id int; |