Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Введение
В SQL, инструкция TRUNCATE TABLE — это операция языка манипулирования данными (DML), которая удаляет все строки таблицы, не вызывая срабатывания триггеров. Результатом этой операции является быстрое удаление всех данных из таблицы, обычно с обходом ряда механизмов обеспечения целостности. Она была официально представлена в стандарте SQL:2008 как необязательная функция F200, "TRUNCATE TABLE statement". TRUNCATE TABLE удаляет все строки из таблицы, но структура таблицы и её столбцы, ограничения, индексы и т. д. остаются без изменений. Для удаления определения таблицы вместе с её данными используйте инструкцию DROP TABLE. Инструкция TRUNCATE TABLE mytable логически (но не физически) эквивалентна инструкции DELETE FROM mytable (без предложения WHERE). Следующие характеристики отличают TRUNCATE TABLE от DELETE:
In SQL, the TRUNCATE TABLE statement is a Data Manipulation Language (DML) operation that deletes all rows of a table without causing a triggered action. The result of this operation quickly removes all data from a table, typically bypassing a number of integrity enforcing mechanisms. It was officially introduced in the SQL:2008 standard, as the optional feature F200, "TRUNCATE TABLE statement". TRUNCATE TABLE removes all rows from a table, but the table structure and its columns, constraints, indexes, and so on remain. To remove the table definition in addition to its data, use the DROP TABLE statement. The TRUNCATE TABLE mytable statement is logically (though not physically) equivalent to the DELETE FROM mytable statement (without a WHERE clause). The following characteristics distinguish TRUNCATE TABLE from 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 можно использовать для таблиц, участвующих в доставке журналов.
In the Oracle Database, TRUNCATE is implicitly preceded and followed by a commit operation. (This may also be the case in MySQL, when using a transactional storage engine.) Typically, TRUNCATE TABLE quickly deletes all records in a table by deallocating the data pages used by the table. This reduces the resource overhead of logging the deletions, as well as the number of locks acquired. Records removed this way cannot be restored in a rollback operation. Two notable exceptions to this rule are the implementations found in PostgreSQL and Microsoft SQL Server, both of which allow TRUNCATE TABLE statements to be committed or rolled back transactionally. It is not possible to specify a WHERE clause in a TRUNCATE TABLE statement. TRUNCATE TABLE cannot be used when a foreign key references the table to be truncated, since TRUNCATE TABLE statements do not fire triggers. This could result in inconsistent data because ON DELETE/ON UPDATE triggers would not fire. In some computer systems, TRUNCATE TABLE resets the count of an Identity column back to the identity's seed. In Microsoft SQL Server 2000 and beyond in full recovery mode, every change to the database is logged, so TRUNCATE TABLE statements can be used for tables involved in log shipping.