Окт 23
MySQL. Удаление записей с несуществующей ссылкой
Предположим у нас есть 2 таблички - ПАПКИ (folders) и ФАЙЛЫ (files). У файлов есть ссылка на айдишку папки, в которой они распологаются. Предположим, что по неосторожности мы удалили несколько ненужных нам папок, но забыли удалить файлы, которые лежали в этих папках. Итак, для того, что бы удалить файлы, у которых ссылка на несуществующую папку, выполняем запрос:
delete from files
where
folder_id not in (select folder_id from folders) and folder_id <> -1
В этом примере так же учтена корневая папка (-1).
6 комментариев на данный момент
Оставить комментарий
А внешние ключи и целостность информации для чего тогда?
Вообще, это решается прописыванием внешних ключей
Использование внешних ключей конечно же помогает. Но бывают проекты, в которых БД недостаточно грамотно спроектирована и тебе приходится принять факт случившегося и пытаться с этим что-то сделать.
Мой пример для тех случаев, когда непоправимое уже случилось
DELETE
files
FROM
files
LEFT JOIN folders ON files.folder_id = folders.folder_id
WHERE folders.folder_id IS NULL
Тоже вполне живой и работающий вариант. Спасибо
Мне пригодил. спасибо.