【MySQL】数据库的约束(主键、外键)

约束:数据库真对数据进行一系列的校验,如果发现插入的数据不符合约束中描述的校验规则,就会插入失败

 

1.约束类型

NOT NULL 指示某列不能存储 NULL 值
UNIQUE 保证某列的每行必须有唯一的值
DEFAULT 规定没有给列赋值时的默认值
PRIMARY KEY NOT NULL 和 UNIQUE 的结合,确保某列(或多个列的结合)有唯一标识,有助于更容易快速地找到表中的一个特定数据
FOREIGN KEY 保证一个表中的数据匹配另一个表中的值的参照完整性
CHECK 保证列中的值符合指定的条件。对于MySQL数据库,对 CHECK 字句进行分析,但是忽略 CHECK 子句

主键 primary key

运用这个约束,表的这一列设置不能为 null

【MySQL】数据库的约束(主键、外键)

测试一下

【MySQL】数据库的约束(主键、外键)

当我们没有对 id 进行赋值的时候,他就会报错,说我们没有设置过默认值。

 

auto_increment 自增主键

【MySQL】数据库的约束(主键、外键)

添加数据的时候不需要输入数据们就会自动生成

 

如果 int 类型的自增主键,有效范围是 -21亿 ~ 21亿,如果超出数据范围,字啊继续自增,就会出现溢出情况

 

外键约束 FOREIGN KEY

【MySQL】数据库的约束(主键、外键)

 

调整后:

【MySQL】数据库的约束(主键、外键)

需要指定三方面信息:

  1. 指定当前表中哪列进行关联
  2. 指定和哪张表关联
  3. 指定和目标表中的哪一张进行关联

后续 student 插入数据的时候,MySQL 就会自动检查当前的 classId 字段的值是否在 class 表中的 id 列中出现过,如果没有出现过,就会插入失败

查看效果

【MySQL】数据库的约束(主键、外键)

使用外键,会对插入操作的效率产生一定的影响,外键约束也会影响表的删除

class 表被其他表关联着,此时是无法直接阐述 class 表的

【MySQL】数据库的约束(主键、外键)

如果真的把 class 删除了,此时再对 student 的 classId 的约束也就没有意义了