约束

Exisi 2023-01-29 14:47:26
Categories: Tags:

约束类型

名称

描述

NOT NULL

非空约束

不接受NULL

DEFAULT

默认值约束

设置默认值

PRIMARY KEY

主键约束

定义为主键的列不允许出现两个和两个以上的相同值

FOREIGN KEY

外键约束

输入的外键值必须在对应的候选码中存在

CHECK

检查约束

输入可能的值;如:性别只能是男女

UNIQUE

唯一约束

一列中不允许出现两个和两个以上的相同值

AUTO_INCREMENT

自增约束

某个字段的值自增

 

 

 

非空约束(NOT NULL

  • 用来定义该键不能为空的约束,在后续插入数据中该值不能为空值
  • 非空约束用于确保当前列的值不为空值(NULL
  • 主键(PRIMARY KEY)的列一定是非空的,可以不用加非空约束。

 

 

 

默认值约束(DEFALUT

  • 默认值的作用是当字段没有值时,会使用提供的默认值进行填充字段值;

  • TEXT(包括 LONGTEXT 等)、JSON 类型的字段不支持默认值;

如果字段值允许为 NULL 并没有指定 DEFAULT 值时,默认添加 DEFAULT NULL

 

 

 

检查约束(CHECK

  • MySQL可以使用check约束,但check约束对数据验证没有任何作用。 也就是说不符合的数据也可以成功被插入

 

 

 

唯一约束(UNIQUE

  • 如果一个字段定义为唯一约束,该字段值必须是唯一的,可以为空。每张表可以定义多个唯一约束
  • 唯一约束是指定table的列或列组合不能重复,保证数据的唯一性。
  • 唯一约束不允许出现重复的值,但是可以为多个 NULL
  • 在创建唯一约束时,如果不给唯一约束名称,就默认和列名相同。
  • 唯一约束不仅可以在一个表内创建,而且可以同时多表创建组合唯一约束。
  • MySQL 会给唯一约束的列上默认创建一个唯一索引

 

 

 

主键约束(PRIMARY KEY

  • 主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值;
  • 字段值必须是唯一的,且不能为空。每张表只能定义一个主键,但是可以定义多个字段组合为一个主键类型。

 

  • 单一主键

由一个字段构成的主键称为单一主键。

 

  • 联合主键

由多个字段组成的主键称为联合主键。

 

  • 如果的多列组合的主键约束, 那么这些列都不允许为空值,并且组合的值不允许重复。
  • 每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别上创建。
  • MySQL的主键名总是PRIMARY, 当创建主键约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。

 

  • 主键的作用在于表里每条记录都具有唯一的值,是在创建表时指定的。
    1. 避免数据冗余,唯一区分表里记录的字段;
    2. 与外键(子表里的一个字段,引用父表里的主键)构成参照完整性约束,防止出现数据不一致;
    3. 可以确保执行数据更新、删除时的正确性;
    4. 加快检索速度,保证实体的完整性。

 

 

 

外键约束(FOREIGN KEY

  • 外键是表的一个特殊字段。主要是建立表之间的关联关系。外键必须依赖数据库已存在的父表的主键
  • 外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系。 也就是说从表的外键值必须在主表中能找到或者为空。
  • 当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据,需要先删除从表中依赖该记录的数据, 然后才可以删除主表的数据。还有一种就是级联删除子表数据。保持数据的一致性和整体性是外键约束的主要作用

  • 外键约束的参照列,在主表中引用的只能是主键或唯一键约束的列,假定引用的主表列不是唯一的记录, 那么从表引用的数据就不确定记录的位置。同一个表可以有多个外键约束。

 

 

自增约束(AUTO_INCREMENT

一个表最多只能有一个自增长列

当需要产生唯一标识符或顺序值时,可设置自增长

自增长列约束的列必须是键列(主键列,唯一键列)

自增约束的列的数据类型必须是整数类型

如果自增列指定了 0 和 null,会在当前最大值的基础上自增;如果自增列手动指定了具体值,直接赋值为具体值