2.1常见约束

约束名 作用 作用域
NOT NULL 非空约束,该字段的值必须有值 列级、表级
UNIQUE 唯一约束,该字段的值不可重复(可以为为null,但不能有两个null) 列级、表级
DEFAULT 默认约束,若该字段的值不手动插入时会有默认的值 列级、表级
CHECK 检查约束,MySQL不支持 表级
PRIMARY KEY 主键约束,代表该字段的值不可重复且不能为null 列级、表级
FOREIGN KEY 外键约束,代表该字段的值引用了另一表中的字段(一般是键,更一般是主键) 表级、列级写上没用
AUTO_INCREMENT 自增约束,描述的列必须是一个键列且是整型,一张表最多只有一个自增长列,一般是主键 列级、表级

2.2列级约束语法

语法:

  1. create table 表名 (
  2. 字段名 类型 列级约束
  3. );

例如:

  1. # 列级约束只支持默认、非空、主键、唯一
  2. CREATE TABLE student(
  3. id int PRIMARY KEY ,#主键
  4. stuName varchar(20) NOT NULL ,#非空
  5. gender char(1) CHECK (gender = '男' OR gender = '女'),# 检查
  6. seat int UNIQUE# 唯一
  7. );

2.3表级约束语法

语法:

  1. create table 表名 (
  2. 字段名 类型,
  3. ...
  4. 字段名 类型,
  5. [constraint 约束名] 约束类型(字段名)
  6. );

例子:

  1. CREATE TABLE student(
  2. id int,
  3. stuName varchar(20),
  4. gender char(1),
  5. seat int,
  6. age int,
  7. majorid int,
  8. CONSTRAINT pk PRIMARY KEY(id),#主键
  9. CONSTRAINT uk UNIQUE KEY(seat), #唯一键
  10. CONSTRAINT ck CHECK (gender='男' OR gender='女'), # 检查约束
  11. CONSTRAINT fk_stuiunfo_major FOREIGN KEY(majorid) REFERENCES major(id) #外建
  12. );

2.4主键和唯一键的异同

  1. 一个表最多只有一个主键,但是可以有多个唯一键
  2. 主键不允许为空,唯一键可以为空(但是最多一个空,两个空就和唯一冲突了)
  3. 都具有唯一性
  4. 都支持组合键(不推荐使用,不稳定)

2.5 存在外键时设置级联删除

  1. alter table 从表 add constraint 索引名 foreign key(从表字段)
  2. references 主表(主表字段)
  3. on delete cascade;

2.6 存在外键时设置级联置空

  1. alter table 从表 add constraint 索引名 foreign key(从表字段)
  2. references 主表(主表字段)
  3. on delete set null;

2.7查看某个表的约束

方式一:

  1. SELECT *
  2. FROM information_schema.table_constraints
  3. WHERE table_name = '表名称';

方式二:

  1. SHOW CREATE TABLE 表名;

2.8查看某个表的索引

  1. SHOW INDEX FROM 表名