用于创建数据库的DDL是这样的
create table manager
(employee_name varchar(20) not null,
manager_name varchar(20) not null,
primary key (employee_name),
foreign key (manager_name) references manager on delete cascade);
如果经理关系的实例是这样的
employee_name | manager_name
-----------------------------
A | B
-----------------------------
B | C
-----------------------------
C | B
-----------------------------
D | B
在这种情况下,如果我删除此关系中的元组 (A, B),则不会删除其他元组。我也是这么想的。
然而,书的答案是删除所有元组。我不明白为什么所有元组都被删除。
您有 A、B、C 和 D 作为员工。其中,您已将 B 和 C 定义为经理。并且您选择使用ON DELETE CASCADE
这意味着如果您在表管理器中删除一个父元组,它将自动影响子元组(表员工)。
基本上,如果您决定删除两个经理(B 和 C) - B 将 A、C 和 D 作为员工,C 将 B 作为员工)。
在这种情况下,所有元组可能会在级联上删除,就像您在创建表时定义的那样。