Сбой ограничения внешнего ключа при попытке удалить несколько строк из нескольких таблиц - PullRequest
0 голосов
/ 04 июня 2019

Я хочу удалить соответствующие строки в staff, login и jobs в зависимости от Staff.StaffID, учитывая, что StaffID и LoginID являются внешними ключами в jobs.Кроме того, StaffID также является внешним ключом в login.Когда я использую следующий запрос, я получаю сообщение об ошибке ограничения ключа foregin.Есть идеи?

SQL:

DELETE jobs, login, staff 
FROM jobs 
    INNER JOIN login 
WHERE login.LoginID=jobs.loginID 
AND staff.StaffID = '18';

Очевидно, что это неполно.Я хотел продолжить ВНУТРЕННЕЕ СОЕДИНЕНИЕ до И для внутреннего входа в login.StaffID = staff.StaffID, а также staff.StaffID = jobs.JobID.Однако, когда я делаю это, я получаю сообщение об ошибке:

DELETE jobs, login, staff 
FROM jobs 
    INNER JOIN login, staff 
WHERE login.LoginID=jobs.LoginID 
AND staff.StaffID=login.StaffID 
AND staff.StaffID = login.LoginID 
AND staff.StaffID = '18';

, которое выдает ошибку: "# 1451 - Невозможно удалить или обновить родительскую строку: ограничение внешнего ключа не выполняется (younglife. login, CONSTRAINT FK_59 ИНОСТРАННЫЙ КЛЮЧ (StaffID) ССЫЛКИ staff (StaffID)) "

Я могу сказать, что это неэффективно, и мне было интересно, как лучше всего подойти к этому,Спасибо.

1 Ответ

1 голос
/ 04 июня 2019

Вы можете выполнить три удаления:

DELETE j
    FROM jobs j JOIN
         login l
         ON l.LoginID = j.LoginID 
    WHERE l.StaffID = 18;

DELETE l
   FROM login l
   WHERE l.StaffID = 18;

DELETE s
    FROM staff s
    WHERE s.StaffID = 18;

Убедитесь, что вы делаете удаления в правильном порядке.

...