Назад к вопросам
Middle
73
questionbank

В чем разница между операторами 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 Нет Есть (для большинства СУБД)