1. 程式人生 > >Oracle-09-刪除表(drop和truncate區別、閃回刪除等)

Oracle-09-刪除表(drop和truncate區別、閃回刪除等)

一、如果既要刪除表中的資料也要刪除表的結構,請使用droptable語句,其格式如下:

drop table 表名

drop table語句(是DDL語句)有如下特徵:

(1)它刪除表中所有的資料行和表結構;

(2)它也刪除表的所有索引(後續會講到);

(3)如果沒有備份的話,所刪除的表無法恢復,Oracle 10g之前版本如果不備份無法恢復,但是Oracle 10g開始提供閃回刪除,所以只要不加關鍵字purge是可以恢復的;

(4)它提交所有的掛起的事物(後續會講到);

(5)所有基於該表的檢視和別名依然保留但已無效;

實戰操作:

Step1:登入lisi使用者,檢視當前使用者下的表,如下圖:


Step2:刪除A表,如下圖:


如果這時候查詢A表,發現報錯,提示不存在,如下圖:


【技術提升】通過drop刪除表時,從Oracle 10g開始,被刪除的表放入回收站,稱為閃回刪除(flashbackdrop),這樣可以恢復被刪除的表。如果不想將表放入回收站可以增加一個“purge”。

drop table的完整語法格式:

drop table 表名 [cascade constraints] [purge]

記住:如果兩張表之間有外來鍵(約束)關係,那麼刪除表的時候Oracle要求刪除所有具有cascade constrains。

實戰操作1:

將之前刪除的A表恢復(之前刪除口令沒加purge關鍵字),如下圖:


檢視A表,如下圖:


實戰操作2:

繼續刪除A表,不加關鍵字purge,不徹底刪除,如下圖:


注意下圖中的命令,該命令是查看回收站內容:


發現A表現在在回收站。

【以上幾條SQL命令彙總】

(1)SQL > drop table A;————————將表A刪除

(2)SQL > select * from cat;——檢視當前登入使用者存放什麼表

(3)SQL > show recyclebin————查看回收站內容

(4)SQL > flashback table A to before drop——將表A從回收站內恢復


對於刪除表語法格式drop table 表名 [cascade constraints] [purge]的說明:

其中cascade constraints是級聯約束,後面會詳細講到,簡單說,級聯約束就是若A表和B表之間存在級聯約束,那麼必須把這個級聯約束刪除,才能刪表。對於purge,如果刪表時候加這個單詞,那麼是徹底刪除,不進回收站。

二、只要在drop table命令中不加入purge,就可以恢復被刪除的表。首先介紹一個資料字典檢視user_recyclebin:

實戰操作:

Step1:先用select*from user_recyclebin檢視被刪除的表,如下圖:


發現沒有,那是因為沒刪除,現在刪除A表,如下圖:


Step2:檢視被刪除的表,如下圖:


發現看上去很複雜,現在用命令

select original_name,object_name from user_recycle_bin檢視:


其中original_name是原表名(表被刪除之前的名字),object_name是該表在回收站裡面的名字。

三、清空回收站命令(慎用!清空後無法恢復)

purge recyclebin

四、截斷表

當一個表中資料已經不再需要時,可以使用truncatetable語句將它們全部刪除掉(截斷),其語法格式如下:

truncate table 表名

truncate table有如下特性:

(1)它刪除表中所有的資料,但保留表結構;(drop table命令是不保留表結構,簡單說,drop是直接把表刪除,而truncate是清空表中的資料但是表還在。

(2)如果沒有備份的話,刪除的資料行無法恢復;

(3)該語句釋放表所佔用的磁碟空間。

實戰操作:

Step1:檢視A表內容,如下圖:


Step2:截斷A表,如下圖:


Step3:檢視A表內容,如下圖:


發現裡面內容沒了,所以truncate table A就是將A表內的資料全部清空,但是A表還在,而之前講的drop table A是將表徹底刪除。