2013-02-08 5 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

Что касается того факта, что эта таблица ссылается на себя, будет ли БД пытаться удалить запись дважды? – rrazd

+0

удалит ссылку менеджера (все ссылки на внешние ключи), а затем удалит запись сотрудника. Но в идеальном бизнес-случае вы не захотите делать каскадное удаление. Мое предложение состоит в том, что вам придется заменить всех сотрудников другим именем менеджера, а затем удалить эту запись. Поэтому это удаление должно быть позабочено о вашей бизнес-логике. – Slowcoder