环境

DBMS:MySQL 8.0.17

工具:Navicat Premium 11.2.16

概述

约束是指对当前字段的数据的限制条件。常见的约束有:非空约束、default约束、唯一约束、check约束、主键约束和外键约束。

非空约束

定义了非空约束的字段的数据不能取空值。

default约束

定义了default约束的字段的数据没有被赋值或被赋予空值时会取默认值。

唯一约束

若唯一约束只有一个字段,则该字段的值必须唯一。

若唯一约束包含多个字段,则所有字段值的组合必须唯一。

check约束

定义了check约束的字段的数据取值必须满足check约束中定义的条件。

主键约束

定义了主键约束的一个或多个字段组合成一个主键。

一个基本表中最多只能有一个主键。

主键的值必须唯一且不能取空值。也就是说:

若主键只有一个字段,则该字段的值必须唯一且不能取空值。

若主键包含多个字段,则每个字段的值不能取空值,所有字段值的组合必须唯一。

外键约束

定义了外键约束的字段成为外键。

外键必须关联一个字段,而且该字段必须具有唯一约束或主键约束,而外键的数据类型必须与该字段的数据类型相同。

外键的取值要么为空值,要么为关联字段中的一个值。

定义约束

约束的定义有两种方式:

列级约束是在对列进行定义时添加约束。列级约束无法定义多个字段的约束。

表级约束是在对表进行定义时为表中的字段添加约束。表级约束无法定义非空约束、default约束和check约束。

MySQL中check约束不起作用,而且外键约束只有通过表级约束定义才能生效。

所以,通常情况下:

非空约束、default约束使用列级约束定义。

外键约束使用表级约束定义。

FOREIGN KEY() REFERENCES ();

定义单个字段的唯一约束或主键约束使用列级约束定义。

定义多个字段组合的唯一约束或主键约束使用表级约束定义。

UNIQUE | PRIMARY KEY(,,...)

创建基本表class,包含字段clno(主键)、clname(非空、唯一):


创建基本表student,其中包含字段sno(主键、自增)、sname(非空、唯一)、sage、ssex(默认值为“男”)、shobby、clno(关联class表的clno):