В чем разница между операторами DELETE и TRUNCATE?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
DELETE удаляет строки по одной, записывая каждое удаление в лог транзакций. Поддерживает операторы WHERE для выборочного удаления и возвращает количество удаленных строк. Может быть откачен (ROLLBACK).
TRUNCATE удаляет все строки из таблицы, освобождая используемое пространство, без записи отдельных удалений в лог транзакций (записывается только факт операции). Не поддерживает операторы WHERE. Как правило, выполняется быстрее, чем DELETE без условия WHERE. TRUNCATE не запускает триггеры ON DELETE. Не может быть полностью откачен в большинстве случаев, так как операция считается DDL (Data Definition Language), хотя в некоторых СУБД (например, PostgreSQL) TRUNCATE может участвовать в транзакциях и быть откачен.
Ключевые отличия:
| Признак | DELETE | TRUNCATE |
|---|---|---|
| Тип операции | DML (Data Manipulation Language) | DDL (Data Definition Language) |
| Логирование | Каждая удаленная строка | Факт операции |
| Условие WHERE | Поддерживается | Не поддерживается |
| Откат (ROLLBACK) | Возможен | В большинстве СУБД невозможен (кроме некоторых имплементаций) |
| Триггеры ON DELETE | Запускаются | Не запускаются |
| Возврат строк | Возвращает количество удаленных строк | Не возвращает |
| Производительность | Медленнее (при удалении всех строк), быстрее (при удалении подмножества) | Быстрее (при удалении всех строк) |
| Переинициализация identity | Нет | Есть (для большинства СУБД) |