УДАЛИТЬ все, где ограничение внешнего ключа MySQL не терпит неудачу - PullRequest
11 голосов
/ 08 августа 2011

Я пытаюсь удалить несколько записей, но получаю следующую ошибку:

Невозможно удалить или обновить родительскую строку: ограничение внешнего ключа не выполняется

Дело в том, что ограничение внешнего ключа не выполняется только для 1 или 2 из моих 100 записей, которые я хочу удалить. Я хочу написать запрос, который удаляет эти 98-99 записей, , пропуская 1 или 2, но не удалось , которые позже я могу вручную проверить и удалить / изменить. Не останавливается из-за какой-то одной проблемной записи, но продолжает другие, игнорируя это.

Есть ли хороший способ сделать это?

Ответы [ 2 ]

7 голосов
/ 15 января 2013

Вы должны LEFT JOIN ссылочную таблицу и добавить условие о том, что в этой таблице отсутствует строка.

Например:

DELETE a FROM a
LEFT JOIN b ON b.a_id = a.id
WHERE b.a_id IS NULL;
2 голосов
/ 08 августа 2011

Использовать игнорировать:

DELETE IGNORE ...

http://dev.mysql.com/doc/refman/5.0/en/delete.html

...