顯示廣告
隱藏 ✕
看板 Book11
作者 book11 (不可失憶)
標題 刪除整個資料表,使用Delete、Truncate Table
時間 2013年01月18日 Fri. AM 11:45:22


許多情況下,我們需要刪除整個資料表內的資料,重新輸入新資料,有三種方法可以參考使用,分別是使用Delete、Trancate與Drop,那使這三種方式的差異為何呢?

一、使用Delete :

使用Delete語法,不加任何Where條件下,是可以移除整個Table的資料,這個方式簡單易懂,但是卻會耗用大量資源,因為Delete語法:

1.Delete屬DML命令,不加任何Where條件下,會一筆一筆的移除資料列,且在交易記錄中每筆刪除的資料,都會記錄成一個項目,當整個Table的資料移除完時,已耗用許多時間。

2.若Table存在刪除的觸發程序(Trigger)時,將會引發觸發程序。

3.如果該Table包含識別欄位,使用Delete陳述式刪除資料表中所有資料時,並不會讓識別編號重置,所以後續再新增的資料,仍會從之前最後一個編號之後繼續編號下去

 

二、使用Truncate :

使用Truncate Table 會移除資料表中的所有資料列,但會保留資料表結構及其欄位、條件約束、索引等。

如果該Table包含識別欄位,這個識別編號會重設為原本定義的初始值。如果未定義任何初始值,就會使用預設值 1。

Trance Table 與Delete 比較的優點為:

1.使用的交易記錄空間較少:Truncate Table會取消配置用來儲存資料表資料的資料頁,以移除資料,所以交易記錄只會記錄頁面的取消配置。

2.通常會使用較少鎖定:Delete會鎖定每一筆資料,以便執行刪除,但Truncate Table只鎖定資料表和頁面,不會鎖定每個資料列。

3.速度較快:綜合以上兩點,Truncate Table會比Delete快!

--
※ 作者: book11 時間: 2013-01-18 11:45:22
※ 看板: Book11 文章推薦值: 0 目前人氣: 0 累積人氣: 116 
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇