truncate和delete 的區別

Xinspirit發表於2012-03-15

SQL> create table t1
  2  ( i int,
  3    a int
  4  );

表已建立。


SQL> insert into t1 values (2,3);

已建立 1 行。

SQL> commit;

提交完成。

SQL> insert into t1 values (3,4);

已建立 1 行。

SQL> commit;

提交完成。

SQL> select * from t1;

         I          A
---------- ----------
         2          3
         3          4

SQL> delete t1;

已刪除2行。

SQL> desc t1;
 名稱                                      是否為空? 型別
 ----------------------------------------- -------- ----------------------------

 I                                                  NUMBER(38)
 A                                                  NUMBER(38)

SQL> rollback;

回退已完成。

SQL> select * from t1;

         I          A
---------- ----------
         2          3
         3          4

SQL> delete t1 where i=3;

已刪除 1 行。

SQL> select * from t1;

         I          A
---------- ----------
         2          3

SQL> rollback;

回退已完成。

SQL> select * from t1;

         I          A
---------- ----------
         2          3
         3          4

SQL> delete t1 where i=3;

已刪除 1 行。

SQL> commit;

提交完成。

SQL> select * from t1;

         I          A
---------- ----------
         2          3

SQL> rollback;

回退已完成。

SQL> select * from t1;

         I          A
---------- ----------
         2          3

SQL> select * from t1;

         I          A
---------- ----------
         2          3

SQL> insert into t1 values (3,4);

已建立 1 行。

SQL> select * from t1;

         I          A
---------- ----------
         2          3
         3          4

SQL> truncate t1;
truncate t1
          *
第 1 行出現錯誤:
ORA-03290: 無效的截斷命令 - 缺失 CLUSTER 或 TABLE 關鍵字


SQL> truncate table t1;

表被截斷。

SQL> desc t1;
 名稱                                      是否為空? 型別
 ----------------------------------------- -------- ----------------------------

 I                                                  NUMBER(38)
 A                                                  NUMBER(38)

SQL> rollback;

回退已完成。

SQL> select * from t1;

未選定行

實驗結果:truncate 是DDL語句,自帶隱式commit,不可rollback,而delete 在沒有commit的前提下是可以進行回滾的。

truncate操作與delete操作對比
操作
回滾
高水線
空間
效率
Truncate
不能
下降
回收
delete
可以
不變
不回收


 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21416913/viewspace-718635/,如需轉載,請註明出處,否則將追究法律責任。

相關文章