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

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

Если коротко. DELETE удаляет строки по условию (WHERE), TRUNCATE — всю таблицу разом. TRUNCATE быстрее, но без отката в большинстве СУБД.
Проверь себя · 1/3разбор после ответа
Нужно вывести только оплаченные заказы (status = 'paid') и отсортировать их по времени создания от новых к старым. Какой запрос соответствует задаче?

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

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