博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

数据库 外键约束 更新/删除 规则: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='表名';

 

posted @ 2022-08-23 15:34  CHANG_09  阅读(1549)  评论(0编辑  收藏  举报