Удаление записи в таблице, которая имеет реляционные таблицы внешнего ключа - PullRequest
3 голосов
/ 14 мая 2009

Привет, ребята, я новичок в базе данных

мой вопрос - как удалить записи в таблице, имеющие отношение внешнего ключа Предположим, у меня есть 2 таблицы сотрудника и отдела, который имеет deptID как отношение Теперь я хочу удалить конкретную строку в таблице, например «удалить из отдела, где depID = 10», это нормально, если сотрудники в отделе удалены, и я также хочу сохранить отношение внешнего ключа. Может ли кто-нибудь PLZ предоставить мне запрос для этого

Спасибо

Ответы [ 5 ]

2 голосов
/ 14 мая 2009

Вы должны указать, что удаление каскадно относится к таблице employee. Как это сделать, зависит от вашей базы данных, но почти каждая база данных поддерживает каскадное удаление.

Например, в SQL Server:

CREATE TABLE Employee
(
    DepId INT NOT NULL REFERENCES Department(DepId) ON DELETE CASCADE
)
1 голос
/ 14 мая 2009

Это зависит от базы данных и от того, как вы определили свои отношения. Вы можете вызвать удаление каскадно, что означает, что удаление родителя удаляет дочерние записи или «удаляет обнуление», что приводит к тому, что дочерние отношения имеют значения NULL в своих полях FK, или что у вас есть. Это зависит от ваших потребностей. Как правило, я не определяю NULLIFY или CASCADE и удаляю каждую запись по мере необходимости, не заботясь об этом автоматически.

0 голосов
/ 14 мая 2009

Синтаксис DB2 (поскольку вы не указали, какая БД используется):

Create table Employee
...
... 
FOREIGN KEY (deptID) REFERENCES department (deptID)
    ON DELETE CASCADE

Если вы укажете опцию CASCADE, сотрудники будут удалены при удалении отдела.

Если вместо CASCADE вы укажете RESTRICT, он не позволит вам удалить отдел, если сначала не будут удалены все сотрудники отдела.

В противном случае, если вы не хотите, чтобы это происходило каждый раз, лучше указать RESTRICT и сначала удалить emp на emp, где бы reqd

Delete * from Employee where deptID = 10;
Delete * from Dept where deptID = 10;

Вот ссылка на примеры

0 голосов
/ 14 мая 2009

Когда вы устанавливаете связь с внешним ключом, вы можете определить (в любом случае в MS SQL Server), какие действия предпринимаются при обновлении и удалении. Например, вы можете сказать «когда запись в отделе удаляется, каскадно удаляйте любые дочерние таблицы, которые ссылаются на нее». Вы можете найти больше информации здесь .

0 голосов
/ 14 мая 2009

В SQL Server вы бы пометили отношение как CASCASE DELETE

В качестве альтернативы сначала выполните команду DELETE для таблицы «Сотрудники», а затем вторую команду «DELETE» для таблицы «Отделы».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...