Я пытаюсь удалить записи, но получаю ошибку ограничения и запрос останавливается. Или я использую «delete ignore ...», но запрос останавливается тоже, только с предупреждением. Я не могу отключить ограничение, мне просто нужно удалить записи без ограничений. Может быть, у mysql есть несколько команд для этого? Я ничего не нашел.Как удалить записи из таблицы mysql, но пропустить записи с ограничениями ошибок?
0
A
ответ
3
Единственный способ, которым я могу себе представить, чтобы написать запрос, который возвращает строку из таблицы вы овладеете, которые не имеют деталей, а затем присоединиться результатом этого запроса с главной таблицей, что-то вроде
DELETE FROM table1 t
INNER JOIN
(
SELECT pk_column FROM table1 t1
LEFT JOIN details1 d1 ON (d1.fk_column = t1.pk_column)
// other LEFT JOIN[s] if you have more detail tables.
WHERE d1.pk_column IS NULL
)a ON t.pk_column = a.pk_column
An альтернатива объединению, которая работает почти так же, заключается в том, чтобы добавить WHERE NOT EXIST
, чтобы проверить
0
Добавить «on delete cascade» в определение таблицы/ограничения.
+0
Он не хочет удалять записи, которые нарушают внешние ограничения, просто пропустите их – a1ex07
Спасибо за ваш ответ. Это не похоже на другой способ, кроме соединения или внешних обработчиков (языки сценариев). В моем специальном случае объединение неприемлемо из-за 1,5 М записей в таблице, до много времени для ожидания, поэтому я использую внешние обработчики. – z3ple