微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在外键上使用 ON DELETE CASCADE 选项

如何解决在外键上使用 ON DELETE CASCADE 选项

在外键上使用 ON DELETE CASCADE 时,级联选项是否仅适用于同一个表中的条目?

考虑使用以下选项创建的表 Employee:

CONSTRAINT EMPSUPERFK FOREIGN KEY (Super_ssn) REFERENCES EMPLOYEE(Ssn) 在更新级联时删除级联,

数据库状态上运行以下命令时会发生什么 如图 5.6 所示?在 Lname = ‘Borg’ 的地方删除员工

答案是所有以 Borg 为经理的员工都将被删除,所有以该员工为经理的员工也将被删除,等等(请注意,该解决方案并非来自该书的作者,而是为什么我在这里问)。

我认为包括该员工在内的所有内容也会被删除,例如“总部”部门,因为他是经理等。这是怎么回事?

enter image description here

解决方法

您正在显示一个自引用外键,它将员工的经理与代表经理的同一表中的相应记录相关联:这是一个层次结构。

当一个父级被删除时(这就是 Borg),然后所有的子级都会被递归地自动删除。表中所有员工都直接或间接引用了Borg,所以表中的所有记录都会被删除。

我以为包括这个员工在内的所有东西都会被删除,例如“总部”这个部门,因为他是经理等等。什么是对的?

问题中提供的信息并未暗示任何此类事情。为此,通常应该在表 department 中设置一个外键,以将列 mgr_ssn 与表 ssn 中的列 employee 相关联,使用 {{1} } 选项。尽管它可能存在,但没有迹象表明它在所提出的问题中存在。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。