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);
Комментарии
Отправить комментарий