数据库 外键约束 更新/删除 规则:Restrict、Cascade、No Action
以 Class表 和 Student表 举例
1.ER图
2.转化为关系模式
1 对 n 时,将 1方 的 主键 合并到 n方 作为 外键,
Class (Cno, Cname)
Student(Sno, Sname, Cno),
Student.Cno 为外键,参考对照 Class.Cno 表
称 Class表 为 主表 / 父表,Student表为 外表 / 子表
3.外键约束规则
①设置 Student 表中的外键 Cno 规则为 Restrict 时,
当删除/更新 Class.Cno 值时,受制于 Student 中已有的 Student.Cno 值。
若想删除/更新的 Class.Cno 值依然存在于 Student 中,报错不允许。
②设置 Student 表中的外键 Cno 规则为 Cascade 时,
当准备删除/更新 Class.Cno 值时,
Student中已有的,与被删除/更新 Class.Cno 值相等的 所有 Student 记录
将被级联(“牵连“)删除 或 更新对应 Student.Cno。
③设置 Student 表中的外键 Cno 规则为 No Action 时,
和RESTRICT一样,只是标准的SQL关键字而已。
————————————————
原文链接:https://blog.csdn.net/m0_48946024/article/details/123508871
查看某表被谁对照参考依赖:
SELECT C.TABLE_SCHEMA 拥有者, C.REFERENCED_TABLE_NAME 父表名称 , C.REFERENCED_COLUMN_NAME 父表字段 , C.TABLE_NAME 子表名称, C.COLUMN_NAME 子表字段, C.CONSTRAINT_NAME 约束名, T.TABLE_COMMENT 表注释, R.UPDATE_RULE 约束更新规则, R.DELETE_RULE 约束删除规则 FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE C JOIN INFORMATION_SCHEMA. TABLES T ON T.TABLE_NAME = C.TABLE_NAME JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS R ON R.TABLE_NAME = C.TABLE_NAME AND R.CONSTRAINT_NAME = C.CONSTRAINT_NAME AND R.REFERENCED_TABLE_NAME = C.REFERENCED_TABLE_NAME WHERE C.REFERENCED_TABLE_NAME IS NOT NULL and C.TABLE_SCHEMA = '库名' and C.REFERENCED_TABLE_NAME = '表名' ALTER TABLE ${表名} DROP FOREIGN KEY ${外键名};
【MySQL】 查看数据表的外键依赖_hgSuper的博客-CSDN博客
-- 建表时间 SELECT CREATE_TIME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='库名' AND TABLE_NAME='表名';