1. 主键约束
- 主键约束关键字:
primary key
- 主键用于唯一的标识一条记录,要求每一条记录的主键值都不相同,且是非空值
- primary key会自带not null 和 unique
- 设置主键约束后会自动带上索引,通过主键查询记录能提高效率
- 一个表中只能设置一个主键,但主键可以仅包含一个字段,也可以包含多个字段
create table world.city(id int primary key);
create table world.city(id int, primary key(id));
create table world.city(id int, name char(35), primary key(id, name));
2. 外键约束
- 外键约束关键字:
foreign key
- 设置外键的字段是且必须是相关联的某一个表的主键字段
- 外键可以加强两个表的相关性,记录的外键值必须在相关表的主键值中出现过
- 外键值可以为空
create table world.country(code char(3), name char(52), PRIMARY KEY (code));
create table world.city(id int AUTO_INCREMENT, countrycode char(3), PRIMARY KEY (id), foreign key(countrycode) references world.country (code));
3. 非空约束
- 非空约束关键字:
not null
- 设置非空约束后,将不允许该字段的值为NULL
create table world.city(id int not null);
4. 唯一性约束
- 唯一约束关键字:
unique
- 设置唯一性约束的字段中的值不能重复出现
- MySQL中
NULL
表示没有值,因此即使有唯一性约束,一个字段也可以有多个NULL
create table world.city(id int unique);
5. 自增约束
- 自增约束关键字:
auto_increment
- 设置自增的字段,将自带not null属性,插入时如果不主动赋值,将在存在过的记录的基础上,找到最大值加1
- 一个表只能设置一个auto_increment约束
- 设置自增约束的字段,必须是整数类型,必须同时设置primary key或unique
6. 默认约束
- 默认约束关键字:
default
- 通过默认约束可以设置字段的缺省值
create table world.city(id int default null);
7. 变更约束性
7.1 主键、外键、唯一性
alter table 表名 add constraint 约束名 primary key|foreign key|unique (列名);
alter table 表名 drop primary key;
alter table 表名 drop index 约束名;
7.2 自增、非空、默认
alter table modify 列名 列类型 auto_increment|not null|default;