1、主键约束
表通常具有包含唯一标识表中每一行的值的一列或一组列。这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性。由于主键约束可保证数据的唯一性,因此经常对标识列定义这种约束。
如果为表指定了主键约束,数据库引擎将通过为主键列自动创建唯一索引来强制数据的唯一性。当在查询中使用主键时,此索引还允许对数据进行快速访问。
如果对多列定义了主键约束,则一列中的值可能会重复,但来自主键约束定义中所有列的值的任何组合必须唯一。
2、外键约束
也称为引用约束或引用完整性约束,能够定义表间以及表内必需的关系。
例如,典型的外键约束可能规定 EMPLOYEE 表中的每个职员必须 是一个现有部门的成员,该部门在 DEPARTMENT 表中定义。
引用完整性是数据库的一种状态,在该状态中,所有外键的所有值都有效。外键是表中的一列或一组列,它的值需要与其父表的行的至少一个主键或唯一键值相匹配。
引用约束是这样一种规则,仅当满足下列其中一个条件时,外键的值才有效:
它们作为父键的值出现
外键的某些组成部分为空
例如,要建立此关系,应将 EMPLOYEE 表中的部门号定义成外键,并将 DEPARTMENT 表中的部门号定义成主键。
这样当在EMPLOYEE表中新添加一个员工,而其所在部门的代号在DEPARTMENT表中未出现时,这将是一个无效键记录,将被阻止。
引用约束的目的是保证表关系得到维护并遵循数据输入规则。
这意味着只要引用约束有效,数据库管理器就保证对于子表中其外键列中具有非空值的每行,相应父表中都存在一个其父键中具有匹配值的行。
3、当操作违反引用约束时,数据库管理器通过强制执行与每个引用约束关联的一组规则来处理这类情况。
当 SQL 操作尝试更改数据的方式导致引用完整性受到影响时,可能是违反了引用约束。例如,
插入操作可能尝试将一个数据行插入到子表中,该行的外键列中的值与相应父表的父键中的值不匹配。
更新操作可能尝试将子表的外键列中的值更改为一个在相应父表的父键中没有匹配值的值。
更新操作可能尝试将父表的父键中的值更改为一个在子表的外键列中没有匹配值的值。
删除操作可能尝试从父表中除去在子表的外键列中具有匹配值的记录。
此时,数据库管理器通过强制执行与每个引用约束关联的一组规则来处理这类情况。这组规则包括:
插入规则
更新规则
删除规则
4、引用约束的插入规则
外键的非空插入值必须与父表的父键的某些值相匹配。如果组合外键的值的任何组成部分为空,那么该值为空。指定外键时,此规则是隐式的。
5、引用约束的更新规则
引用约束的更新规则是在定义引用约束时指定的。选项有 NO ACTION 和 RESTRICT。在更新父表的某行或从属表的某行时应用更新规则。
6、引用约束的删除规则
删除规则是在定义引用约束时指定的。选项有 NO ACTION、RESTRICT、CASCADE 或 SET NULL。仅当外键的某些列允许空值时,才能指定 SET NULL。