温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

哪些情况违反参照完整性

发布时间:2026-09-24 04:48:13 来源:亿速云 阅读:86 作者:小樊 栏目:数据库

参照完整性(Referential Integrity) 是关系数据库中用于保证表与表之间关联数据一致性的规则,核心依赖于外码(外键,Foreign Key)主码(主键,Primary Key) 的约束。

当对数据的操作破坏了“外键必须对应另一个表中存在的主键值(或为空)”这一规则时,即违反参照完整性

以下是最常见的违反情况,按操作类型说明:


一、插入(INSERT)时违反

向**从表(子表,有外键的表)**插入数据时:

  • 外键值在**主表(父表)**中不存在;
  • 且外键值不为 NULL(若允许为空则不算违反)。

例:

  • 学生表(主表):Student(Sno 主键, ...)
  • 选课表(从表):SC(Sno 外键 → Student.Sno, Cno, ...)
  • 插入 SCSno = '999' ,但 Student 中无 999 → ❌ 违反参照完整性

二、更新(UPDATE)时违反

  1. 更新从表外键
    • 将外键值改为主表中不存在的值。
  2. 更新主表主键
    • 主表主键值被修改,但从表中仍有旧值对应记录(未设置级联更新)。

例:

  • Student.Sno='001' 改为 '002'
  • SC 中还有 Sno='001' 的记录且未级联 → ❌ 违反

三、删除(DELETE)时违反

主表删除记录,但从表中仍有引用该主键的外键记录,且:

  • 未设置 ON DELETE CASCADE
  • 未设置 ON DELETE SET NULL
  • 也未先删除从表对应记录

例:

  • 删除 StudentSno='001'
  • SC 中仍有 Sno='001' → ❌ 违反参照完整性

四、特殊说明(不算违反的情况)

以下情况不违反参照完整性:

  • 从表外键值为 NULL(若允许空);
  • 主表删除/更新时使用了合法级联策略:
    • CASCADE:自动删/改从表
    • SET NULL:从表外键置空
    • SET DEFAULT:置默认值

五、总结一句话

只要“从表引用了主表中不存在的主键值”,就违反参照完整性。

如果你需要,我也可以帮你画一张主表 / 从表违规示意图,或结合 SQL 约束写法说明。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI