TRUNCATE / DELETE / DROP или как очистить таблицу

ИМЕЕМ:
Таблица MSG (сообщения) с большим количеством записей.
SQL> CREATE TABLE msg (id INTEGER NOT NULL PRIMARY KEY,
                       description CHAR (50) NOT NULL,
                       date_create DATE);

ЗАДАЧА:
Необходимо очистить таблицу от данных

РЕШЕНИЕ:
Для решения данной задачи есть несколько способов. Ниже описание и пример каждого из них.

Способ №1 - используем DELETE 
Самый простой способ (первый вариант) - выполнение оператора удаления записи. При его выполнении вы будете видеть результат (сколько записей удалено). Удобная штука когда необходимо точно знать и понимать правильные ли данные удалены. НО имеет недостатки перед другими вариантами решения поставленной задачи.

SQL> DELETE FROM msg; --Удалит все строки в таблице

SQL> DELETE FROM msg WHERE date_create = '2019.02.01'; --Удалит все строки у которых дата создания "2019.02.01" 

Способ №2 - используем TRUNCATE 
Использование оператора DML для очистки всех строк в таблице.

SQL> TRUNCATE TABLE msg;
Особенности использования данного оператора:
  • Его нет в Firebird, поэтому пользуемся первым и третьим вариантом.
  • После выполнения нельзя откатить транзакцию, так как это DML
  • Ну и увидеть сколько реально записей было удалено не получится.

Способ №3 - используем DROP
Ну и третий вариант, и он, пожалуй, самый жесткий быстрый - это удаление таблицы и повторное создание, с восстановлением всей структуры (PK, FK, index, и другое). 

SQL> DROP TABLE msg;
SQL> CREATE TABLE msg (id INTEGER NOT NULL PRIMARY KEY,                                      description CHAR (50) NOT NULL,
                       date_create DATE);

При необходимости, можно предварительно создать таблицу с данными которые нам нужны, после чего выполнить удаление:

SQL> Сreate TABLE msg_temp (select * FROM msg WHERE date_create = '2019.02.01');
SQL> DROP TABLE msg;
SQL> CREATE TABLE msg (id INTEGER NOT NULL PRIMARY KEY,
                       description CHAR (50) NOT NULL,
                       date_create DATE);

Комментарии

Популярные сообщения из этого блога

Linux (РедОС). Сброс пароля

КБК. КВФО - Код вида финансового обеспечения (деятельности)

SQL Error [53200]: ОШИБКА: нехватка разделяемой памяти Подсказка: Возможно, следует увеличить параметр max_locks_per_transaction

РедОС. Подключение к сетевой папке