天天看点

SQL完整性约束

0. 前言

完整性约束保证授权用户对数据库所做的修改不会破坏数据的一致性。

1. 单个关系上的约束

1.1 not null 约束

not null声明禁止在该属性上插入空值。任何可能导致向一个声明为not null的属性插入空值的数据都会产生错误诊断信息。

1.2 unique约束

unique ( Aj1 , Aj2 ,…, Ajm )

unique声明指出 Aj1 , Aj2 ,…, Ajm 形成了一个候选码,即在关系中没有两个元组能在所有列出的属性上取值相同。

值得注意的是,候选码属性可以为null, 除非它们已被显示地声明为not null。

1.3 check子句

当应用于关系声明时,check(p)子句指定一个谓词P, 关系中的每个元组都必须满足谓词P。

根据SQL标准,check子句中的谓词可以是包含子查询在内的任意谓词。

1.4 参照完整性

我们常常希望保证在一个关系中给定属性集上的取值也在另一关系的特定属性集的取值中出现,这种情况被称为参照完整性(referential integrity)。

令关系 r1 和 r2 的属性集分别为 R1 和 R2 ,主码分别为 K1 和 K2 。如果要求对 r2 中的任意元组 t2 ,均存在 r1 中的元组 t1 使得 t1 . K1 = t2 . α ,我们称 R2 的子集 α 为参照关系 r1 中 K1 的外码(foreign key)。

技术注解:一个关系模式 r1 可能在它的属性中包含另一个关系模式 r2 的主码。这个属性在 r1 上称作参照 r2 的外码(foreign key)。