一、定义约束
数据库的表中有主键和唯一键,它们的作用都是提升查询速度。
主键和唯一键可以是表中的一列,也可以是由多个列构成的复合主键。在MySQL中,主键列必须遵守以下规则:
(1)一个表只能定义一个主键
(2)主键的值必须是能唯一标识表中的每一行,并且不能为空(null)
(3)复合主键列中不能包含不必要的多余列
(4)一个列名在复合主键的列表中只能出现一次
而唯一键在一个表内可以定义多个,并且允许有空值,但也不允许有重复值。定义主键约束时,系统会自动创建primary key索引,定义唯一键约束时,系统会自动创建unique索引。
1.定义主键约束
当主键为表中的一列时,只需添加primary key关键字即可
create table 表名(列名 列属性 primary key);
当为复合主键时,在所有列的属性定义后,加上primary key(列名)即可
create table 表名(列名 列属性,……,primary key(列名));
如果主键为一列,则上述两种方式都可以,但为多列时只能用第二种方法。此外,在定义主键约束过后,系统会自动为主键创建一个唯一索引,默认名为primary,也可以修改为其他名称。
2.定义唯一键约束
与主键约束相同,只需将上述的primary key变成unique key即可。
当列中存在重复值的时候,将其设置为unique键会报错
但不同于主键,唯一键允许有空值的存在。
3.定义check约束
check约束主要起一个筛选限制的作用,表中的某一列或者表只接受限定条件内的数据。
对列添加check约束
create table test1(
id int(10) not null,
name varchar(20),
age int(10) not null check(age>18 and age<26)
);
对表添加check约束
create table test1(
id int(10) not null,
name varchar(20),
age int(10) not null,
check(id in (select * from test))
);