TRUNCATE vs DELETE: разница на собесе по SQL

TRUNCATE и DELETE обе удаляют данные, но работают по-разному. TRUNCATE сбрасывает таблицу целиком и быстро, DELETE удаляет построчно и поддерживает WHERE. На собесе — классический вопрос на знание DDL/DML.

Если коротко. DELETE удаляет строки по условию (WHERE), TRUNCATE — всю таблицу разом. TRUNCATE быстрее, но без отката в большинстве СУБД.
Проверь себя · 1/3разбор после ответа
В таблице orders нужно вывести заказы так, чтобы сначала шли самые дорогие (amount), а при одинаковой сумме — более ранние по created_at (чтобы вверху был «первый» из одинаковых). Какой ORDER BY подходит?

TRUNCATE vs DELETE: таблица различий

ПараметрTRUNCATEDELETE
Тип командыDDLDML
WHEREНетДа
СкоростьОчень быстроЗависит от объёма
AUTO_INCREMENTСбрасываетНе сбрасывает
Триггеры ON DELETEНе срабатываютСрабатывают
Откат (rollback)Зависит от СУБД (часто нет)Да

Когда использовать TRUNCATE

Когда использовать DELETE

На примере

TRUNCATE — вся таблица
TRUNCATE TABLE sessions;
DELETE — по условию
DELETE FROM sessions WHERE created_at < NOW() - INTERVAL '90 days';

Ловушка на собесе

На собесе проверяют: «удалили миллион строк, AUTO_INCREMENT не сбросился, почему?». Ответ: DELETE не трогает счётчик. Если надо сбросить — нужен TRUNCATE или ручное ALTER SEQUENCE/AUTO_INCREMENT.
Тренировать SQL в Telegram

Ещё сравнения по теме