2011-08-23 1 views
0

Я пытаюсь удалить записи, но получаю ошибку ограничения и запрос останавливается. Или я использую «delete ignore ...», но запрос останавливается тоже, только с предупреждением. Я не могу отключить ограничение, мне просто нужно удалить записи без ограничений. Может быть, у mysql есть несколько команд для этого? Я ничего не нашел.Как удалить записи из таблицы mysql, но пропустить записи с ограничениями ошибок?

ответ

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, чтобы проверить

+1

Спасибо за ваш ответ. Это не похоже на другой способ, кроме соединения или внешних обработчиков (языки сценариев). В моем специальном случае объединение неприемлемо из-за 1,5 М записей в таблице, до много времени для ожидания, поэтому я использую внешние обработчики. – z3ple

0

Добавить «on delete cascade» в определение таблицы/ограничения.

+0

Он не хочет удалять записи, которые нарушают внешние ограничения, просто пропустите их – a1ex07

 Смежные вопросы

  • Нет связанных вопросов^_^