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.frmTRUNCATE 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.