2.1常见约束
| 约束名 | 作用 | 作用域 |
|---|---|---|
| NOT NULL | 非空约束,该字段的值必须有值 | 列级、表级 |
| UNIQUE | 唯一约束,该字段的值不可重复(可以为为null,但不能有两个null) | 列级、表级 |
| DEFAULT | 默认约束,若该字段的值不手动插入时会有默认的值 | 列级、表级 |
| CHECK | 检查约束,MySQL不支持 | 表级 |
| PRIMARY KEY | 主键约束,代表该字段的值不可重复且不能为null | 列级、表级 |
| FOREIGN KEY | 外键约束,代表该字段的值引用了另一表中的字段(一般是键,更一般是主键) | 表级、列级写上没用 |
| AUTO_INCREMENT | 自增约束,描述的列必须是一个键列且是整型,一张表最多只有一个自增长列,一般是主键 | 列级、表级 |
2.2列级约束语法
语法:
create table 表名 (字段名 类型 列级约束);
例如:
# 列级约束只支持默认、非空、主键、唯一CREATE TABLE student(id int PRIMARY KEY ,#主键stuName varchar(20) NOT NULL ,#非空gender char(1) CHECK (gender = '男' OR gender = '女'),# 检查seat int UNIQUE# 唯一);
2.3表级约束语法
语法:
create table 表名 (字段名 类型,...字段名 类型,[constraint 约束名] 约束类型(字段名));
例子:
CREATE TABLE student(id int,stuName varchar(20),gender char(1),seat int,age int,majorid int,CONSTRAINT pk PRIMARY KEY(id),#主键CONSTRAINT uk UNIQUE KEY(seat), #唯一键CONSTRAINT ck CHECK (gender='男' OR gender='女'), # 检查约束CONSTRAINT fk_stuiunfo_major FOREIGN KEY(majorid) REFERENCES major(id) #外建);
2.4主键和唯一键的异同
- 一个表最多只有一个主键,但是可以有多个唯一键
- 主键不允许为空,唯一键可以为空(但是最多一个空,两个空就和唯一冲突了)
- 都具有唯一性
- 都支持组合键(不推荐使用,不稳定)
2.5 存在外键时设置级联删除
alter table 从表 add constraint 索引名 foreign key(从表字段)references 主表(主表字段)on delete cascade;
2.6 存在外键时设置级联置空
alter table 从表 add constraint 索引名 foreign key(从表字段)references 主表(主表字段)on delete set null;
2.7查看某个表的约束
方式一:
SELECT *FROM information_schema.table_constraintsWHERE table_name = '表名称';
方式二:
SHOW CREATE TABLE 表名;
2.8查看某个表的索引
SHOW INDEX FROM 表名
