表管理之四:刪除資料Delete與truncate的使用區別

skyin_1603發表於2016-10-06

本部落格詳細講Deletetruncate的使用區別。

SQL> select * from totalnum;

        T1         T2

---------- ----------

         3         12

         4         15

         5         20

        10        100

       100       1000

       500       5000

6 rows selected.

 1、刪除一條資料不提交:

SQL> delete from totalnum where t2=5000;

1 row deleted.

1》 刪除後查詢:

SQL> select * from totalnum;

        T1         T2

---------- ----------

         3         12

         4         15

         5         20

        10        100

       100       1000

 2》回滾:

SQL> rollback;

Rollback complete.

 3》回滾後查詢:

SQL> select * from totalnum;

        T1         T2

---------- ----------

         3         12

         4         15

         5         20

        10        100

       100       1000

       500       5000

6 rows selected.

2、全部刪除

SQL> delete from totalnum;

6 rows deleted.

1》 刪除後查詢

SQL> select * from totalnum;

no rows selected

2》回滾: 

SQL> rollback;

Rollback complete.

 3》回滾後查詢:

SQL>  select * from totalnum;

        T1         T2

---------- ----------

         3         12

         4         15

         5         20

        10        100

       100       1000

       500       5000

6 rows selected.

3、刪除並提交任務:

SQL> delete from totalnum where t2=5000;

1 row deleted.
1》提交刪除任務

SQL> commit;

Commit complete.

 2》提交後查詢:

SQL>  select * from totalnum;

        T1         T2

---------- ----------

         3         12

         4         15

         5         20

        10        100

       100       1000

 3》回滾:

SQL> rollback;

Rollback complete.

 4》回滾後查詢:

SQL> select * from totalnum;

        T1         T2

---------- ----------

         3         12

         4         15

         5         20

        10        100

       100       1000


4、Truncate的用法

SQL> truncate totalnum;

truncate totalnum

                *

ERROR at line 1:

ORA-03290: Invalid truncate command - missing CLUSTER or TABLE keyword

 以上報錯,說明語法錯誤。

SQL> truncate table totalnum;

Table truncated.

1》刪除後查詢: 

SQL> select * from totalnum;

no rows selected

 2》回滾:

SQL> rollback;

Rollback complete.

 3》回滾後查詢:

SQL> select * from totalnum;

no rows selected

以上的一系列測試表明:delete語句刪除後的資料會被儲存到撤銷表空間中,可以進行資料撤銷。只有刪除後,並提交刪除任務
commit操作後,資料不放回撤銷表空間。而truncate在刪除資料時,在進行刪除操作的同時,也進行了commit操作。刪除後的數
據不放回撤銷表空間,是徹底刪除了,而且是整張表的資料刪除。delete可以進行選擇性刪除,所以在進行操作刪除的動作之前,
要考慮清楚,應該用哪一個語句進行刪除,兩個語句各有各的優點與缺點。

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

相關文章