MySQL 约束详解

MySQL 约束详解

MySQL 中的约束是用来保证数据的完整性的机制。数据完整性一般有以下三种形式:

  1. 实体完整性:保证表中有一个主键。
  2. 域完整性:保证数据每列的值满足特定条件。
  3. 引用完整性:保证两张表之间的引用关系。

以上三种形式的完整性在 MySQL 中都有相应约束进行保证。

使用主键和唯一键约束可以保证实体完整性;使用外键、合适和数据类型、触发器或者 DEFAULT 关键字也可以保证域完整性;使用外键和触发器可以保证引用完整性。可见 MySQL 提供了以下几种约束:

  1. Primary Key
  2. Unique Key
  3. Foreign Key
  4. Default
  5. NOT NULL
  6. 触发器

Primary key、Unique Key 和 Foreign Key 约束

Primary Key 用于约束唯一主键,唯一标识表中的每一条记录,主键对应的列不允许有 NULL 值和重复值,每个表都应该只有一个主键(包含 Unique 约束)。

Unique Key 用于约束唯一索引,唯一标识表中的每一条记录,与 Primary Key 的区别在于可以有多个列同时被定义为 Unique Key。

Foreign Key 用于保证域和参照的完整性。外键当中出现的值必须在其他表中为主键。同时当父表发生变化时,对子表的操作可以有 4 种方案:CASCADE(删除子表对应的行)、SET NULL(将子表对应行置空)、NO ACTION、RESTRICT。

对错误数据的约束

MySQL 允许非法的或不正确的数据的插入或更新,例如向 NOT NULL 的列中插入一个 NULL 值,那么此时 MySQL 会将 NULL 值更改为 0 值插入。如果想要 MySQL 在用户插入错误数据时进行报错而不是警告,需要设置参数 sql_mode。

ENUM 和 SET 约束

用来约束离散值在一个集合以内。如果是连续值和范围的约束需要通过触发器去实现。

触发器与约束

触发器的作用是在执行 INSERT、DELETE 和 UPDATE 命令之前或之后自动调用 SQL 命令或存储过程。一个表可以建立 6 个触发器,即 3 个操作 AFTER 和 BEFORE 各建一个。

posted @ 2018-04-08 19:50  便当君  阅读(563)  评论(0编辑  收藏  举报