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