К списку
SQL и базы данныхJuniorСкрининг с HR

Отличия между DELETE и TRUNCATE в SQL: что нужно знать QA-инженеру

Краткий ответ

Команда DELETE удаляет строки по условию, поддерживает откат и срабатывание триггеров, но работает медленнее. TRUNCATE быстро очищает всю таблицу без возможности отката и не вызывает триггеры.

Развёрнуто

Краткий ответ

DELETE удаляет выбранные записи из таблицы, сохраняя возможность отката транзакции и активации триггеров, однако это влияет на производительность. TRUNCATE мгновенно очищает всю таблицу, не поддерживает откат и не вызывает триггеры, что делает её значительно быстрее.


Как это работает

DELETE — это оператор DML (Data Manipulation Language), который удаляет строки по заданному условию. При использовании DELETE изменения можно отменить, если запрос выполняется внутри транзакции. Кроме того, при удалении срабатывают все связанные триггеры, что полезно для сложной логики обработки.

TRUNCATE — это оператор DDL (Data Definition Language), который удаляет все записи из таблицы целиком. Он не генерирует отдельные операции удаления для каждой строки, поэтому работает быстрее. Однако TRUNCATE не поддерживает откат после выполнения и не активирует триггеры, так как фактически пересоздаёт структуру таблицы.

Характеристика DELETE TRUNCATE
Удаление По условию или все строки Все строки сразу
Возможность отката Да, в рамках транзакции Нет
Вызов триггеров Да Нет
Скорость Медленнее Быстрее
Тип оператора DML DDL

Пример

-- Удаляем все строки с условием
DELETE FROM orders WHERE order_date < '2023-01-01';

-- Быстро очищаем всю таблицу
TRUNCATE TABLE orders;

В первом случае удаляются только заказы до 2023 года с возможностью отката и вызовом триггеров. Во втором — таблица полностью очищается без возврата и без триггеров.

Что важно знать на собеседовании

  • DELETE поддерживает условия удаления и транзакции, TRUNCATE — только полное удаление без отката.
  • TRUNCATE работает быстрее за счёт минимизации логирования и отсутствия вызова триггеров.
  • TRUNCATE нельзя использовать, если нужны триггеры, каскадные действия или частичное удаление.
  • DELETE более гибкий, но при больших объёмах данных может быть медленнее.
  • В некоторых СУБД TRUNCATE восстанавливает идентификаторы (auto_increment) в начальное значение.

Тема: SQL и базы данных | Уровень: junior