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