В SQL оператор TRUNCATE TABLE
представляет собой операцию языка манипулирования данными (DML) [1] , которая удаляет все строки таблицы, не вызывая срабатывания триггерного действия. Результат этой операции быстро удаляет все данные из таблицы , обычно обходя ряд механизмов обеспечения целостности. Он был официально представлен в стандарте SQL:2008 как необязательная функция F200, "оператор TRUNCATE TABLE".
TRUNCATE TABLE удаляет все строки из таблицы, но структура таблицы и ее столбцы, ограничения, индексы и т. д. остаются. Чтобы удалить определение таблицы вместе с ее данными, используйте оператор DROP TABLE .
Высказывание TRUNCATE TABLE mytable
логически (хотя и не физически) эквивалентно высказыванию DELETE FROM mytable
(без WHERE
предложения). Следующие характеристики отличают TRUNCATE TABLE
от DELETE
:
TRUNCATE
неявно предшествует и следует за операцией фиксации . (Это также может иметь место в MySQL при использовании транзакционного механизма хранения.)TRUNCATE TABLE
быстро удаляет все записи в таблице, освобождая страницы данных, используемые таблицей. Это снижает накладные расходы на регистрацию удалений, а также количество полученных блокировок . Записи, удаленные таким образом, не могут быть восстановлены в операции отката. Двумя заметными исключениями из этого правила являются реализации, найденные в PostgreSQL и Microsoft SQL Server , обе из которых позволяют TRUNCATE TABLE
фиксировать или откатывать операторы транзакционно.WHERE
В заявлении невозможно указать пункт TRUNCATE TABLE
.TRUNCATE TABLE
нельзя использовать, когда внешний ключ ссылается на таблицу, которая должна быть усечена, поскольку TRUNCATE TABLE
операторы не запускают триггеры . Это может привести к несогласованным данным, поскольку триггеры ON DELETE
/ ON UPDATE
не будут запускаться.TRUNCATE TABLE
сбрасывает счетчик столбца Identity до начального значения идентификатора .Стандарт SQL классифицирует TRUNCATE как оператор изменения данных , синонимичный манипуляции данными (DML). Это соответствует TRUNCATE, который логически эквивалентен неограниченной операции DELETE.
Однако некоторые документы описывают TRUNCATE как операцию языка определения данных (DDL), поскольку TRUNCATE можно рассматривать как комбинированную операцию DROP+CREATE. [2]