1. 程式人生 > >SQL中drop、truncate和delete的應用場景

SQL中drop、truncate和delete的應用場景

最近在做的專案中需要對錶進行重用,準確地說應該是把資料表中地資料清掉,但表結構及索引等表屬性都不變。針對這個場景,這裡簡單區分下SQL中常見的drop、truncate、delete;已經瞭解的同學可以略過。

從操作性質上分:

 SQL有DDL、DCL、DML三種:
         delete屬於DML(資料庫操作語言):操作原資料會被放置到rollback segement 中,可進行回滾操作(用於事務原子操作),同時可觸發trigger;
         truncate、drop屬於DDL(資料庫定義語言):操作立即執行,無資料被放置rollback segement區域,不會觸發triggle(由於 truncate TABLE 釋放資料頁資源,不記錄在日誌中,所以它不能啟用觸發器);

從功能上分:

 簡單粗略分析:delete功能相對更多,可以新增where 語句:delete from 表名稱 where 列名稱 = 值;
 具體細分:
       drop (刪除表):刪除內容和定義,把整個表去掉,同時釋放資源(刪除表的結構被依賴的約束(constrain),觸發器(trigger),索引(index),但依賴於該表的儲存過程/函式將被保留,但其狀態會變為:invalid)。
      truncate (清空表中的資料):清空表資料,釋放空間但不刪除定義(保留表的資料結構)。
      delete (刪除表中的資料):delete 語句用於刪除表中的行,每次從表中刪除一行,並且同時將該行的刪除操作作為事務記錄在日誌中儲存,以便進行回滾操作。

注:truncate TABLE 在功能上與不帶 WHERE 子句的 delete 語句相同:二者均刪除表中的全部行。但 truncate TABLE 比 delete 速度快,且使用的系統和事務日誌資源少。
      delete 語句每次刪除一行,並在事務日誌中為所刪除的每行記錄一項。    

PS:對於執行速度,一般來說: drop> truncate > delete。

大家針對不同的應用場景,選擇合適的sql,文章很基礎,主要是平時總結溫故,共勉!!