【参照完整性定义】
在 SQL 中,关系模型的参照完整性在 CREATE TABLE
中用 FOREIGN KEY
短语定义哪些列为外码,用 REFERENCES
短语指明这些外码参照哪些吗的主码
例如,关系 sc 中一个元组表示一个学生选修的某门课程的成绩,其中 Sno、Cno 为主码,用分别参照引用 student 表的主码和 course 表的主码
1 | CREATE TABLE sc ( |
【参照完整性检查与违约处理】
可能破坏参照完整性的情况
参照完整性将两个表中的相应元组联系了起来,因此,对被参照表和参照表进行增、删、改操作时,可能破坏参照完整性,必须进行检查以保证这两个表的相容性
以 student 表和 sc 表为例,可能破坏参照完整性的情况及违约处理如下
违约处理
当出现破坏参照完整性的情况时,系统可采用以下策略进行处理:
- 拒绝执行
NO ACTION
:不允许执行该操作执行,一般设为默认策略 - 级联
CASCADE
:删除或修改参照表的一个元组导致与被参照表不一致时,删除或修改参照表中所有导致不一致的元组 - 设为空值
NULL
:删除或修改被参照表的一个元组造成不一致时,将参照表中所欲造成不一致的元组的对应属性设为空值
需要注意的是,对于参照完整性,除了定义外码,还应定义外码列是否允许空值
实例
显示说明参照完整性的违约处理示例
1 | CREATE TABLE sc ( |