Введение

В SQL, инструкция TRUNCATE TABLE — это операция языка манипулирования данными (DML), которая удаляет все строки таблицы, не вызывая срабатывания триггеров. Результатом этой операции является быстрое удаление всех данных из таблицы, обычно с обходом ряда механизмов обеспечения целостности. Она была официально представлена в стандарте SQL:2008 как необязательная функция F200, "TRUNCATE TABLE statement". TRUNCATE TABLE удаляет все строки из таблицы, но структура таблицы и её столбцы, ограничения, индексы и т. д. остаются без изменений. Для удаления определения таблицы вместе с её данными используйте инструкцию DROP TABLE. Инструкция TRUNCATE TABLE mytable логически (но не физически) эквивалентна инструкции DELETE FROM mytable (без предложения WHERE). Следующие характеристики отличают TRUNCATE TABLE от DELETE:

В базе данных Oracle, TRUNCATE неявно предшествует и сопровождается операцией commit. (То же самое может относиться и к MySQL при использовании транзакционного механизма хранения.) Как правило, TRUNCATE TABLE быстро удаляет все записи в таблице, освобождая страницы данных, используемые таблицей. Это снижает накладные расходы на ведение журнала удалений, а также количество приобретаемых блокировок. Записи, удаленные таким образом, нельзя восстановить при выполнении отката. Два заметных исключения из этого правила — реализации в PostgreSQL и Microsoft SQL Server, которые позволяют выполнять инструкции TRUNCATE TABLE транзакционно, с возможностью фиксации или отката. Указать предложение WHERE в инструкции TRUNCATE TABLE невозможно. TRUNCATE TABLE нельзя использовать, если на таблицу, которую необходимо усечь, ссылается внешний ключ, поскольку инструкции TRUNCATE TABLE не запускают триггеры. Это может привести к несогласованности данных, так как триггеры ON DELETE/ON UPDATE не будут срабатывать. В некоторых компьютерных системах TRUNCATE TABLE сбрасывает счетчик столбца Identity к начальному значению (seed) идентификатора. В Microsoft SQL Server 2000 и более поздних версиях в режиме полного восстановления каждое изменение в базе данных регистрируется, поэтому инструкции TRUNCATE TABLE можно использовать для таблиц, участвующих в доставке журналов.