Spec-Zone.ru › MySQL 8.4

15.1.37 Оператор TRUNCATE TABLE

TRUNCATE [TABLE] tbl_name

TRUNCATE TABLE полностью очищает таблицу. Для его выполнения требуется привилегия DROP. Логически, TRUNCATE TABLE похож на оператор DELETE, удаляющий все строки, или на последовательность операторов DROP TABLE и CREATE TABLE.

Для повышения производительности, TRUNCATE TABLE обходит метод DML для удаления данных. Таким образом, он не вызывает срабатывание триггеров DML, не может быть выполнен для InnoDB таблиц с родительско-дочерними внешними ключами и не может быть отменён, как операция DML. Однако TRUNCATE TABLE операции над таблицами, использующими движок хранилища, поддерживающий атомарные операторы DDL, либо полностью завершаются, либо отменяются, если сервер останавливается во время их выполнения. Дополнительную информацию см. в Разделе 15.1.1, «Поддержка атомарных операторов определения данных».

Хотя TRUNCATE TABLE похож на оператор DELETE, он классифицируется как оператор DDL, а не DML. Он отличается от оператора DELETE следующим образом:

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

  • Операции TRUNCATE вызывают неявную фиксацию, поэтому их нельзя отменить. См. Раздел 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, innodb_data_home_dir и innodb_directories. Чтобы TRUNCATE TABLE создавало табличное пространство в его текущем расположении, добавьте каталог в настройку innodb_directories перед запуском TRUNCATE TABLE.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/truncate-table.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API