TRUNCATE TABLE
Оператор TRUNCATE TABLE используется для удаления всех записей из таблицы в Oracle. Он выполняет ту же функцию что и DELETE, только без условий WHERE.
Предупреждение: Если вы очистите таблицу с помощью оператора TRUNCATE TABLE, то ее откат невозможен.
Синтаксис
Синтаксис для оператора TRUNCATE TABLE в Oracle/PLSQL:
TRUNCATE TABLE [schema_name.]table_name
[ PRESERVE MATERIALIZED VIEW LOG | PURGE MATERIALIZED VIEW LOG ]
[ DROP STORAGE | REUSE STORAGE ] ;
Параметры или аргументы
Необязательный. Если указано, то это имя схемы к которой принадлежит таблица.
Таблица, которую вы хотите очистить.
PRESERVE MATERIALIZED VIEW LOG
Необязательный. Если указано, то materialized view log будет сохранено, когда таблица очищается. Это поведение по умолчанию.
PURGE MATERIALIZED VIEW LOG
Необязательный. Если указано, то materialized view log будет очищен, когда таблица очищается.
Необязательный. Если указано, всё хранилище очищающихся строк будет высвобождено, за исключением пространства, которое было выделено в MINEXTENTS . Это поведение по умолчанию.
Необязательный. Если указано, всё хранилище очищающихся строк останется распределенным в таблице.
Пример
В Oracle очищение таблицы является быстрым способом, чтобы очистить записи из таблицы, если вам не нужно беспокоиться об откате. Одной из причин является то, что, когда таблица очищается, это не влияет на какие-либо из индексов, триггеров или зависимостей таблицы. Очищение таблицы также намного проще, чем удаление таблицы и ее воссоздания.
Рассмотрим пример того, как использовать оператор TABLE TRUNCATE в Oracle/PLSQL.
TRUNCATE TABLE оператор SQLite
Оператор TRUNCATE TABLE используется для удаления всех записей из таблицы.
SQLite не имеет явной команды TRUNCATE TABLE, как другие базы данных. Вместо этого он добавил оптимизатор TRUNCATE в оператор DELETE. Чтобы усечь таблицу в SQLite, вам просто нужно выполнить оператор DELETE без оператора WHERE. Оптимизатор TRUNCATE обрабатывает все остальное. Давайте проясним.
Обычно, когда вы выполняете оператор DELETE, база данных должна обработать каждую строку в таблице, чтобы выполнить удаление. В SQLite, когда вы выполняете оператор DELETE без оператора WHERE, оптимизатор TRUNCATE запускается вместо обычного поведения удаления. Оптимизатор TRUNCATE удаляет все данные из таблицы без необходимости обработки каждой строки в таблице. Это намного быстрее, чем обычная операция удаления.
Синтаксис
Синтаксис truncate a table (с использованием TRUNCATE ) в SQLite:
DELETE FROM table_name;
Параметры или аргументы
table_name
Таблица, которую вы хотите очистить.
Примечание
- SQLite может использовать TRUNCATE, только если в таблице (для усечения) нет триггеров.
Пример
Вы можете выбрать усечение таблицы вместо ее удаления и повторного создания. Усечение таблицы — более быстрый метод удаления всех данных из таблицы.
Давайте рассмотрим пример того, как усечь таблицу в SQLite.
Как полностью очистить таблицу sql
TRUNCATE — опустошить таблицу или набор таблиц
Синтаксис
TRUNCATE [ TABLE ] [ ONLY ] имя [ * ] [, . ] [ RESTART IDENTITY | CONTINUE IDENTITY ] [ CASCADE | RESTRICT ]
Описание
Команда TRUNCATE быстро удаляет все строки из набора таблиц. Она действует так же, как безусловная команда DELETE для каждой таблицы, но гораздо быстрее, так как она фактически не сканирует таблицы. Более того, она немедленно высвобождает дисковое пространство, так что выполнять операцию VACUUM после неё не требуется. Наиболее полезна она для больших таблиц.
Параметры
Имя таблицы (возможно, дополненное схемой), подлежащей опустошению. Если перед именем таблицы указано ONLY , очищается только заданная таблица. Без ONLY очищается и заданная таблица, и все её потомки (если таковые есть). После имени таблицы можно также добавить необязательное указание * , чтобы явно обозначить, что блокировка затрагивает и все дочерние таблицы. RESTART IDENTITY
Автоматически перезапускать последовательности, связанные со столбцами опустошаемой таблицы. CONTINUE IDENTITY
Не изменять значения последовательностей. Это поведение по умолчанию. CASCADE
Автоматически опустошать все таблицы, ссылающиеся по внешнему ключу на заданные таблицы, или на таблицы, затронутые в результате действия CASCADE . RESTRICT
Отказать в опустошении любых таблиц, на которые по внешнему ключу ссылаются другие таблицы, не перечисленные в этой команде. Это поведение по умолчанию.
Замечания
Чтобы опустошить таблицу, необходимо иметь право TRUNCATE для этой таблицы.
Команда TRUNCATE запрашивает блокировку ACCESS EXCLUSIVE для каждой таблицы, которую она обрабатывает. Когда указано RESTART IDENTITY , все последовательности, которые должны быть перезапущены, так же блокируются исключительно. В случаях, когда требуется обеспечить параллельный доступ к таблице, следует использовать DELETE .
TRUNCATE нельзя использовать с таблицей, на которую по внешнему ключу ссылаются другие таблицы, если только и эти таблицы не опустошаются этой же командой. Проверка допустимости очистки в таких случаях потребовала бы сканирования таблицы, а главная идея данной команды в том, чтобы не делать этого. Для автоматической обработки всех зависимых таблиц можно использовать указание CASCADE — но будьте очень осторожны с ним, иначе вы можете потерять данные, которые не собирались удалять!
При выполнении TRUNCATE не срабатывают никакие триггеры ON DELETE , которые могут быть настроены для таблиц. Однако при этом срабатывают триггеры ON TRUNCATE . Если триггеры ON TRUNCATE определены для любых из этих таблиц, то все триггеры BEFORE TRUNCATE срабатывают до того, как происходит опустошение, а все триггеры AFTER TRUNCATE срабатывают после того, как завершается опустошение последней таблицы и все последовательности сбрасываются. Триггеры срабатывают по порядку обработки таблиц (сначала для таблиц, перечисленных в команде, затем для тех, что затрагиваются каскадно).
Команда TRUNCATE небезопасна с точки зрения MVCC. После опустошения таблицы она будет выглядеть пустой для параллельных транзакций, если они работают со снимком, полученным до опустошения. За подробностями обратитесь к Разделу 13.5.
TRUNCATE является надёжной транзакционной операцией в отношении данных в таблицах: опустошение будет безопасно отменено, если окружающая транзакция не будет зафиксирована.
С указанием RESTART IDENTITY подразумеваемые операции ALTER SEQUENCE RESTART также выполняются транзакционно; то есть, они будут отменены, если окружающая транзакция не будет зафиксирована. Это отличается от обычного поведения ALTER SEQUENCE RESTART . Учтите, что если до того, как транзакция отменится, будут выполнены какие-либо дополнительные операции с последовательностями, эффект этих операций также будет отменён, но не их влияние на значение currval() ; то есть после транзакции currval() продолжит возвращать последнее значение последовательности, полученное внутри прерванной транзакции, хотя сама последовательность уже может быть несогласованной с ним. Подобным образом обычно ведёт себя currval() после сбоя транзакции.
TRUNCATE в настоящее время не поддерживается для сторонних таблиц. Из этого следует, что если у целевой таблицы есть дочерние таблицы, являющиеся сторонними, команда не будет выполнена.
Примеры
Опустошение таблиц bigtable и fattable :
TRUNCATE bigtable, fattable;
Та же операция и сброс всех связанных генераторов последовательностей:
TRUNCATE bigtable, fattable RESTART IDENTITY;
Опустошение таблицы othertable и каскадная обработка всех таблиц, ссылающихся на othertable по ограничениям внешнего ключа:
TRUNCATE othertable CASCADE;
Совместимость
Стандарт SQL:2008 включает команду TRUNCATE с синтаксисом TRUNCATE TABLE имя_таблицы . Предложения CONTINUE IDENTITY / RESTART IDENTITY также описаны в стандарте, но с небольшими отличиями, хотя их назначение похоже. Поведение этой команды при параллельных операциях, согласно стандарту, отчасти определяются реализацией, так что приведённые выше замечания при необходимости следует учитывать и сопоставлять с другими реализациями.
| Пред. | Наверх | След. |
| START TRANSACTION | Начало | UNLISTEN |
Быстрая очистка таблиц Oracle. Выражение TRUNCATE TABLE
Довольно-таки часто при работе с СУБД Oracle возникает необходимость удалить все данные из таблицы, причем максимально быстро. Кроме того, надо физически освободить место на носителе.
С помощью выражения delete можно просто удалить записи из таблицы. Но это не всегда будет достаточно быстро и не освободит место на носителе. Для выполнения поставленной задачи хорошо подходит выражение TRUNCATE TABLE — работает быстро, чистит чисто.
В простейшем случае синтаксист такой:
Более сложные синтаксические конструкции смотрите в документации Oracle® Database SQL Reference.
При использовании truncate table, можно столкнуться с такой ошибкой:
ORA-02266: unique/primary keys in table referenced by enabled foreign keys
Эта ошибка появляется, если на таблицу, которую Вы хотите очистить, ссылаются другие таблицы (т.е. используются foreign keys). Причем, эта ошибка появляется даже в том случае, если в таблицах нет записей.
Чтобы решить это ограничение Oracle, перед выполнением TRUNCATE TABLE надо отключить все foreign keys, выполнить очистку, после чего ключи включить.
Чтобы найти все foreign keys, можно выполнить такой запрос:
Получить эту же информацию можно еще и таким запросом:
Узнав все foreign keys и таблицы, в которых они находятся, Вы их можете отключить.
Это можно сделать следующим выражением:
После отключения foreign keys можно выполнить очистку — TRUNCATE TABLE. А после этого надо не забыть включить отключенные ключи:
Как видите, даже, казалось бы, у простого выражения Oracle, есть свои особенности.
Комментарии.
Внимание.
Комментировать могут только зарегистрированные пользователи.
Возможно использование следующих HTML тегов: , , ,
.
