SQL中drop、truncate和delete的應用場景
阿新 • • 發佈:2019-01-04
最近在做的專案中需要對錶進行重用,準確地說應該是把資料表中地資料清掉,但表結構及索引等表屬性都不變。針對這個場景,這裡簡單區分下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,文章很基礎,主要是平時總結溫故,共勉!!