Разница между DELETE и TRUNCATE в SQL

Операторы DELETE и TRUNCATE используются для удаления данных из таблицы, но работают по-разному и имеют различные последствия для базы данных.

DELETE

Оператор DELETE удаляет отдельные строки, соответствующие условиям WHERE. При этом срабатывают триггеры, а удаление записывается в журнал транзакций, что позволяет выполнить откат (ROLLBACK).

DELETE FROM employees WHERE department = 'IT';

Особенности DELETE:

  • Позволяет удалить только часть данных.
  • Записывает каждое удаление в журнал транзакций.
  • Поддерживает откат (ROLLBACK).
  • Может быть медленнее TRUNCATE, особенно при больших объемах данных.

TRUNCATE

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

TRUNCATE TABLE employees;

Особенности TRUNCATE:

  • Удаляет все данные сразу.
  • Работает быстрее, так как не фиксирует каждое удаление отдельно.
  • Не поддерживает WHERE, удаляет все строки таблицы.
  • Может сбрасывать значения автоинкрементных (AUTO_INCREMENT) столбцов.

Сравнение DELETE и TRUNCATE

ХарактеристикаDELETETRUNCATE
Удаление отдельных строкДаНет
Запись в журнал транзакцийДаЧастично
Возможность отката (ROLLBACK)ДаНет
Запуск триггеровДаНет
Скорость выполненияМедленнееБыстрее
Сброс автоинкрементаНетДа