Операторы 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) | Да | Нет |
| Запуск триггеров | Да | Нет |
| Скорость выполнения | Медленнее | Быстрее |
| Сброс автоинкремента | Нет | Да |