Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

Инструкция TRUNCATE TABLE

Инструкция TRUNCATE TABLE — это инструкция, не входящая в стандарт ANSI, которая необратимо удаляет все строки из таблицы без занесения в журнал удаления отдельных строк. Эта инструкция быстро удаляет все записи из таблицы, не влияя на структуру таблицы и не занимая или занимая очень мало места в журналах отката или журналах транзакций. Однако, поскольку данная операция не журналируется, инструкцию TRUNCATE TABLE нельзя отменить после выполнения.


Стандартный синтаксис de facto

Официально инструкция TRUNCATE TABLE не является стандартной командой ANSI. Однако есть стандарт, который поддерживают платформы и который имеет следующий формат.

TRUNCATE TABLE имя_таблицы


Ключевые слова

имя_таблицы

Имя любой таблицы в текущей базе данных или схеме.


Общие правила

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

Эту команду следует подавать вручную. Мы настоятельно не рекомендуем использовать ее в скриптах или работающих системах, которые содержат невосстановимые данные. Ее нельзя использовать совместно с инструкциями, управляющими транзакциями, такими, как BEGIN TRAN и COMMIT.


Советы и хитрости программирования

Поскольку инструкция TRUNCATE TABLE не заносится в журнал, обычно она используется в базах данных, находящихся в процессе разработки. В рабочих базах данных ее нужно применять осторожно!

Мы настоятельно не рекомендуем вставлять инструкцию TRUNCATE

TABLE в хранимые процедуры или функции рабочего приложения, поскольку — большинство платформ не журиалируют эту операцию и не смогут отменить неправильно поданную инструкцию.

Команда TRUNCATE TABLE не будет выполнена, если другой пользователь заблокировал таблицу в тот момент, когда команда была подана. Инструкция TRUNCATE TABLE не активизирует триггеры, но будет работать и при их наличии. Однако инструкция не сработает, если в данной таблице есть ограничения FOREIGN KEY.


DВ2

Версия 8 DB2 не поддерживает инструкцию TRUNCATE TABLE.


MySQL

Платформа MySQL, начиная с версии 3.23, поддерживает базовый формат инструкции TRUNCATE TABLE.

TRUNCATE TABLE имя

Платформа MySQL получает нужный результат путем удаления и повторного создания указанной таблицы. Поскольку MySQL хранит каждую таблицу в файле с именем имя./гт, то для правильной работы команды файл с этим именем должен существовать в директории, содержащей файлы базы данных.

Например, следующая инструкция удалит все данные из таблицы publishers.

TRUNCATE TABLE publishers

Платформа Oracle позволяет удалить таблицу или индексированный кластер (но не хеш-кластер). Синтаксис следующий.

TRUNCATE {CLUSTER [владелец.]кластер |
TABLE [владелец_таблица [{PRESERVE | PURGE} MATERIALIZED VIEW LOG]} [{DROP | REUSE} STORAGE]

Инструкция TRUNCATE TABLE впервые появилась на платформе Oracle, и другие производители вскоре ввели поддержку этой инструкции. В Oracle к этой инструкции были добавлены дополнительные возможности, которые часто поддерживаются другими производителями.


Синтаксические элементы в Oracle следующие

CLUSTER | TABLE

Указывается, будет удаляться индексированный кластер или таблица. Индексированный кластер — это конструкция, которая хранит связанные строки двух таблиц физически на диске рядом друг с другом для ускорения соединения путем уменьшения нагрузки на каналы ввода-вывода. При удалении индексированного кластера нельзя использовать такие опции, как SNAPSHOT LOG и STORAGE.

PRESERVE MA TERIALIZED VIEWLOG

При удалении основной таблицы сохраняются все журналы-снимки.

PURGE MATERIALIZED VIEW LOG Удаляются все журналы-снимки.

DROP STORAGE

Дисковое пространство, освободившееся при удалении рядов, высвобождается. REUSE STORAGE

Дисковое пространство, освободившееся при удалении рядов, остается закрепленным за данной таблицей. Например:

TRUNCATE TABLE scon. authors

PRESERVE SNAPSHOT LOG REUSE STORAGE

В этом примере удаляются все записи в таблице scott.authors. Сохраняется существующий журнал-снимок, и таблица может повторно использовать закрепленное за ней освободившееся место.


PostgreSQL

Платформа PostgreSQL мало отличается от сложившегося промышленного стандарта. Было добавлено ключевое слово TABLE.

TRUNCATE [TABLET имя

Ключевое слово TABLE является необязательным. Например, следующая команда удаляет все записи из таблицы authors базы данных PostgreSQL.

TRUNCATE autners


SQL Server

Платформа SQL Server поддерживает сложившийся de facto промышленный стандарт. Смотрите также

DELETE

Источник