Операторы 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
Характеристика | DELETE | TRUNCATE |
---|---|---|
Удаление отдельных строк | Да | Нет |
Запись в журнал транзакций | Да | Частично |
Возможность отката (ROLLBACK ) | Да | Нет |
Запуск триггеров | Да | Нет |
Скорость выполнения | Медленнее | Быстрее |
Сброс автоинкремента | Нет | Да |