← Все вопросы

Как удалить строки из таблицы SQL (DELETE)?

Задан 6 месяцев назад767 просмотров2 ответа
9

Нужно удалить из таблицы один конкретный заказ, а потом — все отменённые заказы старше года. Как правильно удалить строки в SQL? Чем DELETE отличается от TRUNCATE и DROP?

2 ответа

13
✓ Принятый ответ — помог автору

Удаление строк — команда DELETE с обязательным (по смыслу) WHERE:

DELETE FROM orders
WHERE id = 42;

Удалить по сложному условию:

DELETE FROM orders
WHERE status = 'cancelled'
  AND created_at < '2025-06-01';

Как и с UPDATE, главная опасность — забыть WHERE:

DELETE FROM orders;   -- удалит ВСЕ строки таблицы!

Поэтому правило то же: сначала SELECT * FROM orders WHERE ... — посмотреть, что именно удалится, потом менять SELECT на DELETE. И по возможности в транзакции с ROLLBACK на случай ошибки.

Разница с похожими командами:

  • DELETE — удаляет строки по условию, можно откатить, срабатывают триггеры. Медленнее на огромных объёмах.
  • TRUNCATE — мгновенно очищает всю таблицу целиком, без WHERE, обычно быстрее и сбрасывает счётчики, но это уже операция уровня структуры.
  • DROP TABLE — удаляет саму таблицу вместе с данными и структурой; после неё таблицы нет вообще.

Ещё момент: если на строку ссылается внешний ключ из другой таблицы, DELETE может не выполниться (нарушение ссылочной целостности), пока не удалите или не обновите зависимые строки.

5

Часто вместо физического удаления делают мягкое удаление (soft delete): добавляют столбец is_deleted или deleted_at и вместо DELETE пишут UPDATE ... SET deleted_at = NOW(). Так данные не теряются безвозвратно, их можно восстановить и сохранить для истории. А в выборках просто добавляют WHERE deleted_at IS NULL. Для важных данных это безопаснее, чем настоящий DELETE.

Ваш ответ

Войдите, чтобы ответить на вопрос.