Команда DELETE используется для удаления одной или всех строк в таблице. Предложение WHERE используется для указания условия, по которому удалять строки. Если WHERE отсуствует, то удаляются все строки. После применения DELETE требуется выполнить COMMIT или ROLLBACK, для фиксации результатов транзакции или отката. При вызове DELETE сработают все триггеры таблицы.
SQL> SELECT COUNT(*) FROM emp;
COUNT(*)
----------
14
SQL> DELETE FROM emp WHERE job = 'CLERK';
4 rows deleted.
SQL> COMMIT;
Commit complete.
SQL> SELECT COUNT(*) FROM emp;
COUNT(*)
----------
10
DELETE не освобождает место после удаления. После выполения таблица фрагментируется, и при выполнении запросов на выборку свободное место будет так же просматриваться на получение строк.
TRUNCATE удаляет все строки из таблицы. Триггеры не сработают и операцию нельзя будет отменить. TRUNCATE работает быстрее, чем DELETE и не использует табличное пространство UNDO, как DELETE.
SQL> TRUNCATE TABLE emp;
TABLE truncated.
SQL> SELECT COUNT(*) FROM emp;
COUNT(*)
----------
0
Команда DROP удаляет таблицу из базы данных. Все строки таблицы, индексы и привелегии удалаются. DML триггеры не вызываются. Операция не может быть отменена.
SQL> DROP TABLE emp;
TABLE dropped.
SQL> SELECT * FROM emp;
SELECT * FROM emp
*
ERROR at line 1:
ORA-00942: TABLE or view does not exist
Начиная с Oracle 10g, после удаления, таблица может быть восстановлена. Например,
SQL> FLASHBACK TABLE emp TO BEFORE DROP;
Flashback complete.
|