递归地引用SQL参照整数

时间:2017-10-15 05:17:13

标签: mysql referential-integrity

用于创建数据库的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),则不会删除其他元组。我想是这样的。

然而,本书的答案是所有元组都被删除了。我无法理解为什么删除所有元组。

1 个答案:

答案 0 :(得分:0)

您有 A,B,C和D作为员工。其中您已将 B和C定义为经理。并且您已选择使用ON DELETE CASCADE,这意味着如果在表管理器中删除一个父元组,它将自动影响子元素(表Employees)。

基本上,如果您决定删除两个经理(B和C) - B有A,C和D为员工,C有B为员工)。

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