В предыдущем уроке мы научились изменять записи с помощью UPDATE. Теперь рассмотрим, как удалять ненужные или устаревшие строки с помощью оператора DELETE. Это важная DML-команда, которую нужно применять особенно аккуратно, потому что удалённые данные не всегда можно легко восстановить.
DELETE FROM table_name
WHERE condition;
DELETE FROM table_name — указывает таблицу, из которой нужно удалить строки.WHERE condition — определяет, какие именно строки будут удалены.Если WHERE не указан, будут удалены все строки таблицы.
WHERE: ошибка в условии может удалить не те данные или слишком много строк.SELECT: перед DELETE полезно выполнить SELECT с тем же условием и убедиться, что выборка верная.DELETE удаляет только данные, но не саму таблицу и не её столбцы.Удалим одного покупателя по его идентификатору:
DELETE FROM customer
WHERE customer_id = 1;
Примечание: благодаря WHERE customer_id = 1 будет удалена только одна конкретная запись.
Удалим записи оплат, сделанные до определённой даты:
DELETE FROM payment
WHERE payment_date < '2005-05-25';
Результат: будут удалены все строки из payment, у которых дата платежа меньше указанной.
Иногда нужно удалить строки, связанные с условием из другой таблицы. Например, удалим платежи неактивных покупателей:
DELETE FROM payment
WHERE customer_id IN (
SELECT customer_id
FROM customer
WHERE active = 0
);
Результат: будут удалены платежи всех покупателей, помеченных как неактивные.
Если нужно полностью очистить таблицу, DELETE можно использовать и без WHERE:
DELETE FROM temp_import;
Примечание: таблица temp_import останется существовать, но все её строки будут удалены.
Хорошая практика — сначала посмотреть, какие строки попадут под удаление:
-- Сначала проверяем строки
SELECT customer_id, first_name, last_name, active
FROM customer
WHERE active = 0;
-- Только после проверки выполняем DELETE
DELETE FROM customer
WHERE active = 0;
Такой подход помогает избежать случайного удаления лишних данных.
DELETE особенно полезенКлючевые выводы этого урока:
DELETE удаляет существующие строки из таблицы.WHERE будут удалены все строки таблицы.SELECT с тем же условием.DELETE сохраняет структуру таблицы — удаляются только данные.