В чем разница между командами DELETE и TRUNCATE в SQL?

«В чем разница между командами DELETE и TRUNCATE в SQL?» — вопрос из категории SQL, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Обе команды удаляют данные из таблицы, но принципиально различаются по механизму и последствиям.

Аспект DELETE TRUNCATE
Условие Может использовать WHERE для выборочного удаления. Удаляет все строки таблицы. Условие WHERE не поддерживается.
Журналирование Каждое удаление строки логируется (записывается в журнал транзакций). Это позволяет выполнить ROLLBACK. Обычно журналируется только освобождение страниц данных, что делает операцию невозвратной в большинстве СУБД (после коммита).
Триггеры Запускает триггеры DELETE. Не запускает триггеры.
Скорость Медленнее, особенно на больших таблицах, так как удаляет строки по одной. Значительно быстрее, так как освобождает данные на уровне страниц (деаллоцирует экстенты).
Автоинкремент (IDENTITY) Не сбрасывает счетчик. Сбрасывает счетчик автоинкремента до начального значения (обычно 1).

Примеры:

-- DELETE: Удалить конкретные записи. Операцию можно откатить.
DELETE FROM Orders WHERE order_date < '2023-01-01';

-- TRUNCATE: Мгновенно очистить всю таблицу. Практически необратимо.
TRUNCATE TABLE AuditLog;

Вывод: Используйте DELETE для выборочного, контролируемого удаления с возможностью отката. Используйте TRUNCATE для быстрой и полной очистки таблицы, когда данные больше не нужны.