2013-02-08 103 views
2

任何一个可以解释为什么以下不会对MySQL的(给了语法错误当前):引用自己的表的外键?

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 
) 

还,假设它的工作时,在关系管理的元组被删除时,会发生什么?

回答

4

语法会,

create table manager 
( 
    employee_name varchar(20) not null, 
    manager_name varchar(20) null, 
    CONSTRAINT tb_pk primary key (employee_name), 
    CONSTRAINT tb_fk foreign key (manager_name) 
      references manager (employee_name) on delete cascade 
) 

问题:假设它的工作,当关系经理的元组被删除,会发生什么?

答案:所有的子条目也将被删除。

+0

这个表引用了自己的事实,DB会尝试删除两次该条目吗? – rrazd 2013-02-08 15:50:12

+0

它将删除管理员引用(所有外键引用),然后它将删除员工记录。但是在理想的商业案例中,您不希望进行级联删除。我的建议是,您将不得不用其他经理姓名替换所有员工,然后删除此记录。所以这个删除应该在你的业务逻辑上得到关注。 – Slowcoder 2013-02-08 16:01:56