Усечение (SQL)

Команда базы данных для удаления данных

В SQL оператор TRUNCATE TABLEпредставляет собой операцию языка манипулирования данными (DML) [1] , которая удаляет все строки таблицы, не вызывая срабатывания триггерного действия. Результат этой операции быстро удаляет все данные из таблицы , обычно обходя ряд механизмов обеспечения целостности. Он был официально представлен в стандарте SQL:2008 как необязательная функция F200, "оператор TRUNCATE TABLE".

Поведение

TRUNCATE TABLE удаляет все строки из таблицы, но структура таблицы и ее столбцы, ограничения, индексы и т. д. остаются. Чтобы удалить определение таблицы вместе с ее данными, используйте оператор DROP TABLE .

Высказывание TRUNCATE TABLE mytableлогически (хотя и не физически) эквивалентно высказыванию DELETE FROM mytable(без WHEREпредложения). Следующие характеристики отличают TRUNCATE TABLEот DELETE:

  • В базе данных OracleTRUNCATE неявно предшествует и следует за операцией фиксации . (Это также может иметь место в 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]

Ссылки

  1. ^ BNF для SQL:2023 определяет TRUNCATE как оператор изменения данных SQL: "ISO/IEC 9075 BNF". iso.org . Получено 2024-12-30 .
  2. ^ Например, документация MySQL классифицирует TRUNCATE как оператор DDL: "MySQL :: MySQL 8.4 Reference Manual :: 15.1.37 TRUNCATE TABLE Statement". dev.mysql.com . Получено 2024-12-30 .


Взято с "https://en.wikipedia.org/w/index.php?title=Truncate_(SQL)&oldid=1271809515"