Spec-Zone.ru › MySQL 5.7

13.1.34 Выполнение инструкции TRUNCATE TABLE

TRUNCATE [TABLE] tbl_name

TRUNCATE TABLE полностью очищает таблицу. Для этого требуется привилегия DROP.

Логически, TRUNCATE TABLE аналогична инструкции DELETE, которая удаляет все строки, или последовательности инструкций DROP TABLE и CREATE TABLE. Для повышения производительности она обходит метод DML для удаления данных. Таким образом, она не может быть отменена, не вызывает срабатывание триггеров ON DELETE и не может быть выполнена для InnoDB таблиц с родительско-дочерними внешними ключами.

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

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

  • Операции усечения вызывают неявную фиксацию и поэтому не могут быть отменены. См. Раздел 13.3.3, «Инструкции, которые вызывают неявную фиксацию».

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

  • TRUNCATE TABLE завершается неудачно для InnoDB таблицы или NDB таблицы, если существуют какие-либо FOREIGN KEY ограничения из других таблиц, ссылающихся на таблицу. Внешние ключевые ограничения между столбцами одной таблицы разрешены.

  • Операции усечения не возвращают осмысленного значения количества удаленных строк. Обычно результат — “0 строк затронуто,”, что следует интерпретировать как “нет информации.”

  • До тех пор, пока файл формата таблицы tbl_name.frm является допустимым, таблицу можно пересоздать как пустую таблицу с помощью TRUNCATE TABLE, даже если данные или файлы индексов повреждены.

  • Любое значение AUTO_INCREMENT сбрасывается до своего начального значения. Это справедливо даже для MyISAM и InnoDB, которые обычно не повторно используют значения последовательности.

  • При использовании с разбиением таблиц TRUNCATE TABLE сохраняет разбиение; то есть данные и файлы индексов удаляются и повторно создаются, в то время как файл определений разделов (.par) не затрагивается.

  • Инструкция TRUNCATE TABLE не вызывает триггеров ON DELETE.

TRUNCATE TABLE для целей двоичного протоколирования и репликации рассматривается как DDL, а не DML, и всегда записывается как инструкция.

TRUNCATE TABLE для таблицы закрывает все обработчики таблицы, которые были открыты с помощью HANDLER OPEN.

На системе с большим InnoDB буфером пула и включенным innodb_adaptive_hash_index операции TRUNCATE TABLE могут привести к временному снижению производительности системы из-за сканирования LRU, которое происходит при удалении записей адаптивного индекса хэширования InnoDB таблицы. Проблема была решена для DROP TABLE в MySQL 5.5.23 (Ошибка #13704145, Ошибка #64284), но остается известной проблемой для TRUNCATE TABLE (Ошибка #68184).

TRUNCATE TABLE может использоваться с сводными таблицами Performance Schema, но эффект заключается в сбросе сводных столбцов до 0 или NULL, а не в удалении строк. См. Раздел 25.12.15, «Сводные таблицы Performance Schema».

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

Spec-Zone.ru

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