Spec-Zone.ru › MySQL 9.2

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.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/truncate-table.html

Spec-Zone.ru

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