書名: Oracle DBA基礎教程作者名: 林樹澤本章字數: 1117字更新時間: 2021-03-26 13:21:43
4.9 刪除和截斷表
在不需要一個表時,可以刪除表,使用DROP TABLE語句,此時會徹底刪除表中的數據和表的結構,表的結構指在創建表時定義的列名、列屬性和一些約束信息。
如果只想刪除表中的數據可以使用TRUNCATE TABLE語句截斷一個表,此時會保留表的結構,只刪除表中的數據。本節將講解和演示如何刪除和截斷表。
為了演示如何刪除或截斷一個表,先使用例子4-28創建一個表EMP_TEMP。
例子4-28 創建一個表EMP_TEMP
SQL> create TABLE scott.emp_temp 2 as 3 select * 4 from scott.emp; 表已創建。
不嚴謹地講,表由表結構和表中的數據組成,如果不需要表中的數據,可以使用TRUNCATE來截斷一個表。使用該指令截斷表時,只刪除表中的數據但是保留表的結構,也就是對表的定義還是存在的,可以使用INSERT指令向表中添加數據。
該指令的語法格式為:
TRUNCATE TABLE username.TABLEname。
為了使讀者便于直觀理解,這里先給出一個例子(如例子4-29所示),然后再介紹TRUNCATE的其他特性。
例子4-29 截斷表emp_temp
SQL> truncate TABLE scott.emp_temp; 表已截掉。
輸出說明用戶SCOTT中的表emp_temp已經截斷,再使用例子4-30驗證改變表的結構,也就是驗證對表的定義是否還存在。
例子4-30 驗證表emp_temp的定義是否還存在
SQL> desc scott.emp_temp; 名稱 是否為空? 類型 ---------------------------------------------------------------------------------- ------------ ------------- EMPNO NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2)
顯然,輸出結果說明用戶SCOTT的表emp_temp依然存在。再使用例子4-31來驗證表中是否還有數據。
例子4-31 驗證表emp_temp中是否還有數據
SQL> select * 2 from scott.emp_temp; 未選定行
顯然,用戶SCOTT的表emp_temp中沒有數據。
下面我們總結一下TRUNCATE指令的特性,這些特性來源于Oracle的文檔。
● 刪除表中的數據但是保留了表結構。
● 數據一旦刪除就釋放數據占有的磁盤空間,并且數據不可恢復。
● 如果表被外鍵引用,則無法使用TRUNCATE刪除表中的數據。
● 所有和表相關的索引也被截斷。
● 不會觸發刪除表的刪除觸發器。
在讀者學習了索引和觸發器后可以使用例子來驗證上述對于TRUNCATE指令特性的說明是否正確。這里不再給出具體示例。
如果不再需要表,包括表中的數據和表的結構,則使用DROP指令。使用該指令時刪除的是表的結構,表中的數據無法恢復,所以在使用該指令前務必要確認不再需要該表。使用DROP刪除表的語法格式為:
DROP TABLE [username.]TABLEname CASCADE CONSTRAINTS;
當一個表被DROP后,該表使用的EXTENTS得到釋放,如果這些EXTENTS是連續分配的,則這些連續區域得到釋放并組合成更大的可分配空間。如果該表的外鍵被另一個表引用,即該表在外鍵關系中是父表,則需要使用CASCADE CONSTRAINTS。使得該表脫離與子表的關系,并順利刪除。在維護數據完整性時會再次講到CASCADE CONSTRAINTS,讀者可以暫時不關心該參數的使用。
為了說明刪除一個表,我們使用例子4-32來說明,在使用TRUNCATE刪除用戶SCOTT的表emp_temp時,正是刪除了表中的數據,下面就使用DROP指令刪除表結構。
例子4-32 使用DROP指令刪除表emp_temp
SQL> DROP TABLE scott.emp_temp; 表已丟棄。
再使用例子4-33,驗證該表的結構和表中數據是否存在。
例子4-33 驗證SCOTT用戶的表emp_temp結構是否存在
SQL> desc scott.emp_temp; ERROR: ORA-04043: 對象 scott.emp_temp 不存在
顯然在用戶SCOTT的表emp_temp已經刪除,因為錯誤提示為“對象 scott.emp_temp 不存在”。當然也無法查詢該表中的數據。
- 機器學習系統:設計和實現
- Mastering Adobe Captivate 2017(Fourth Edition)
- Arduino by Example
- 碼上行動:零基礎學會Python編程(ChatGPT版)
- 可解釋機器學習:模型、方法與實踐
- C語言程序設計
- Python從入門到精通
- Qlik Sense? Cookbook
- SQL Server 2016 從入門到實戰(視頻教學版)
- Mastering Concurrency Programming with Java 9(Second Edition)
- Python程序設計開發寶典
- 零基礎學Java第2版
- Implementing Microsoft Dynamics NAV(Third Edition)
- Mastering Unreal Engine 4.X
- 征服C指針(第2版)