TRUNCATE
— в языке
SQL
— операция мгновенного удаления всех строк в таблице. Логически схожа с операцией
DELETE
без оператора
WHERE
, но в ситуациях на практике имеет отличия
.
Синтаксис
Общий синтаксис команды:
TRUNCATETABLE<ИмяТаблицы>
Последствием выполнения такой команды является полное удаление всех строк таблицы
<Имя Таблицы>
.
Отличия от оператора DELETE
Основные отличия операторов TRUNCATE и DELETE, которые могут присутствовать в различных реализациях
СУБД
:
Операция TRUNCATE не записывает в журнал событий удаление отдельных строк. Вследствие чего не может активировать
триггеры
.
После операции TRUNCATE для некоторых
СУБД
(например,
Oracle
) следует неявная операция
COMMIT
. Поэтому удаленные в таблице записи нельзя восстановить операцией
ROLLBACK
. Но существуют и СУБД, в которых операция TRUNCATE может участвовать в транзакциях, например,
PostgreSQL
и
Microsoft SQL Server
.
Операция DELETE блокирует каждую строку, а TRUNCATE — всю таблицу.
Операция TRUNCATE не возвращает какого-то осмысленного значения (обычно возвращает 0) в отличие от
DELETE
, которая возвращает число удаленных строк.
Операция TRUNCATE в некоторых
СУБД
(например,
MySQL
или
Microsoft SQL Server
), сбрасывает значение счетчиков (для полей с AUTOINCREMENT / IDENTITY). В
PostgreSQL
для сброса счётчиков необходимо указывать модификатор RESTART IDENTITY.
Операция TRUNCATE в некоторых
СУБД
(например,
MySQL
, PostgreSQL или
Microsoft SQL Server
) запрещена для таблиц, содержащих внешние ключи других таблиц. В PostgreSQL существует, однако, модификатор CASCADE, который разрешает TRUNCATE в этой ситуации — данные из зависимых таблиц удаляются в той же транзакции.
В
SQLite
операция как таковая отсутствует, но есть оптимизация операции DELETE, которая «значительно ускоряет её работу, если отсутствует аргумент WHERE».
Реализация оператора TRUNCATE может зависеть от выбора конкретной СУБД. Поэтому в каждом случае необходимо изучать документацию выбранной системы.
Примечания
(неопр.)
Microsoft. Дата обращения: 12 октября 2014.
25 апреля 2012 года.
(неопр.)
Дата обращения: 14 мая 2010.
25 апреля 2012 года.
(неопр.)
Oracle Corporation. Дата обращения: 14 мая 2010.
25 апреля 2012 года.
(рус.)
. postgrespro.ru. Дата обращения: 7 июня 2020.
7 июня 2020 года.
(неопр.)
. www.sqlite.org. Дата обращения: 7 июня 2020.
17 июня 2020 года.