目录

4.7 约束

约束是一种限制,它通过限制表中的数据,来确保数据的完整性和唯一性。比如有的数据是必填项,就像个人信息认证的时候,或者填注册信息的时候,手机号这种就不能空着,所以就有了非空约束;又有的数据比如用户的身份证号,不能跟其他人的一样,所以就需要使用唯一约束等等。约束能够帮助数据库管理员更好地管理数据库,并且能够确保数据库中数据的正确性和有效性。可以在创建表时规定约束(通过CREATE TABLE语句),或者在表创建之后通过ALTER TABLE语句规定约束。

在MySQL中主要有6种约束:主键约束、外键约束、唯一约束、检查约束、非空约束和默认值约束。根据约束数据列的限制,约束可分为:单列约束(只约束一列)、多列约束(可约束多列),根据约束的作用范围,约束可分为:列级约束(只能作用在一个列上,跟在列的定义后面)、表级约束(可以作用在多个列上,不与列一起,而是单独定义)。


4.7.1 主键约束

在建立数据表的时候,一般情况下,为了方便更快地查找表中的记录,都会要求在表中设置一个“主键”。”主键“是表里面的一个特殊字段,其关键字是primary key,这个字段能够唯一标识该表中的每条信息。

使用主键的时候需要注意以下几个点:

① 主键约束相当于 唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值;

② 每个表最多只允许一个主键;

③ 当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引;


4.7.2 唯一约束

唯一约束(Unique)是指所有记录中字段的值不能重复出现。例如为id字段加上唯一性约束后,每条记录的id值都是唯一的,不能出现重复的情况,但可以为空。


4.7.3 非空约束

非空约束用来约束表中的字段不能为空,其特点如下:

① 默认,所有的类型的值都可以是NULL,包括INT、FLOAT等数据类型

② 非空约束只能出现在表对象的列上,只能某个列单独限定非空,不能组合非空

③ 一个表可以有很多列都分别限定了非空,空字符串不等于NULL


4.7.4 默认值约束

给某个字段/某列指定默认值,一旦设置默认值,在插入数据时,如果此字段没有显式赋值,则赋值为默认值,关键字为DEFAULT。


4.7.5 外键约束

外键约束是表的一个特殊字段,普遍会和主键约束一起使用,用来确保数据的一致性。对于两个具有关联关系的表来说,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。

所以外键就是用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。

 

在定义外键时需要遵守以下规则:

① 主表必须已经存在于数据库中,或者是当前正在创建的表,如果是后一种情况,则主表与从表是同一个表,这样的表称做自参照表,这种结构称做自参照完整性;

② 必须为主表定义主键,允许在外键中出现空值;

③ 在主表的表名后面指定列名或列名的组合,这个列或列的组合必须是主表的主键;

④ 外键中列的数目及类型必须和主表的主键中列的数目及类型相同;


4.7.6 CHECK约束

MySQL 8.0中可以使用check约束了,8.0以下版本不可用。MySQL可以使用简单的表达式来实现CHECK约束,也允许使用复杂的表达式作为限定条件,例如在限定条件中加入子查询。