SQL 递归引用整数



用于创建数据库的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 作为员工)。

在这种情况下,所有元组可能会在级联上删除,就像您在创建表时定义的那样。

最新更新