【发布时间】:2021-03-29 19:01:17
【问题描述】:
在外键上使用ON DELETE CASCADE 时,级联选项是否仅适用于同一个表中的条目?
考虑使用以下选项创建的表 Employee:
CONSTRAINT EMPSUPERFK FOREIGN KEY (Super_ssn) REFERENCES EMPLOYEE(Ssn) ON DELETE CASCADE ON UPDATE CASCADE,
在数据库状态下运行以下命令会发生什么 如图 5.6 所示?删除 Lname = 'Borg' 的员工
答案是,所有以 Borg 作为经理的员工都将被删除,所有以 Borg 作为经理的员工也将被删除,等等(请注意,解决方案不是来自本书的作者,而是为什么我在这里问)。
我以为包括该员工在内的所有内容也会被删除,例如部门“总部”,因为他是经理等。什么是正确的?
【问题讨论】:
-
我要注意的是,如果您正在学习 SQL 的 Oracle 方言,您发布的外键定义是无效的。 Oracle 不支持
on update cascade子句。所以从技术上讲,答案应该是当你尝试创建外键时会抛出错误,而随后的delete语句只会删除单个“Borg”行。
标签: sql oracle foreign-keys sql-delete