15.1.39 Заявление TRUNCATE TABLE
TRUNCATE [TABLE] tbl_name
TRUNCATE TABLE полностью очищает таблицу. Для его выполнения требуется право DROP. Логически, TRUNCATE
TABLE аналогичен оператору DELETE, удаляющему все строки, или последовательности операторов DROP TABLE и CREATE TABLE.
Для высокой производительности, TRUNCATE
TABLE обходит метод DML для удаления данных. Таким образом, он не вызывает срабатывание триггеров ON DELETE, его нельзя выполнить для InnoDB таблиц с родительско-дочерними отношениями по внешним ключам, и его нельзя отменить как операцию DML. Однако, TRUNCATE
TABLE операции над таблицами, использующими поддерживаемый DDL-системой хранилища движок, полностью подтверждаются или отменяются, если сервер прерывается во время их выполнения. Для получения дополнительной информации см. Раздел 15.1.1, «Поддержка атомарных операторов определения данных».
Хотя TRUNCATE TABLE похож на DELETE, он классифицируется как оператор DDL, а не DML. Он отличается от DELETE следующим образом:
Операции усечения удаляют и повторно создают таблицу, что намного быстрее, чем удаление строк по одной, особенно для больших таблиц.
Операции усечения вызывают неявное подтверждение и поэтому не могут быть отменены. См. Раздел 15.3.3, «Операторы, вызывающие неявное подтверждение».
Операции усечения не могут быть выполнены, если сессия удерживает активную блокировку таблицы.
TRUNCATE TABLEтерпит неудачу дляInnoDBтаблицы илиNDBтаблицы, если существуютFOREIGN KEYограничения от других таблиц, которые ссылаются на таблицу. Внешние ключи между столбцами одной таблицы разрешены.Операции усечения не возвращают осмысленного значения для числа удаленных строк. Обычно результатом является «0 строк затронуто,», что следует интерпретировать как «нет информации.»
При условии, что определение таблицы корректно, таблицу можно повторно создать как пустую таблицу с помощью
TRUNCATE TABLE, даже если данные или индексные файлы стали поврежденными.Любое
AUTO_INCREMENTзначение сбрасывается до своего начального значения. Это верно даже дляMyISAMиInnoDB, которые обычно не повторно используют значения последовательности.При использовании с разграниченными таблицами,
TRUNCATE TABLEсохраняет разбиение; то есть данные и индексные файлы удаляются и пересоздаются, в то время как определения разделов остаются без изменений.Оператор
TRUNCATE TABLEне вызываетON DELETEтриггеров.Поддерживается усечение поврежденной
InnoDBтаблицы.
TRUNCATE TABLE для целей двоичного журналирования и репликации обрабатывается как DDL, а не DML, и всегда регистрируется как оператор.
TRUNCATE TABLE для таблицы закрывает все обработчики для таблицы, которые были открыты с помощью HANDLER OPEN.
TRUNCATE TABLE может быть использован с таблицами сводки Performance Schema, но это приводит к сбросу сводных столбцов до 0 или NULL, а не к удалению строк. См. Раздел 29.12.20, «Таблицы сводки Performance Schema».
Усечение InnoDB таблицы, находящейся в файловой системе по одной таблице, удаляет существующую файловую систему и создает новую. Если файловая система была создана более ранней версией и находится в неизвестном каталоге, InnoDB создает новую файловую систему в стандартном расположении и запишет в журнал ошибок следующее предупреждение: Расположение DATA DIRECTORY должно находиться в известном каталоге. Расположение DATA DIRECTORY будет проигнорировано, и файл будет помещен в стандартное расположение datadir. Известные каталоги определяются переменными datadir, innodb_data_home_dir и innodb_directories. Чтобы TRUNCATE TABLE создал файловую систему в текущем расположении, добавьте каталог в настройку innodb_directories перед запуском TRUNCATE TABLE.
© 2025 Oracle
Licensed under the GPLv2 License.