delete、truncate、drop 都能刪除整張表的資料;
了解一下:ddl(data definition language)資料定義語言,dml(data manipulation language)資料操作語言。
基本介紹:
一、delete:
dml語言,執行delete 操作時,每次從表中刪除一行,並且同時將該行的刪除操作記錄redo和undo表空間中中以便回滾(rollback)和重做操作,需要手動提交(commit)操作才能生效,可以通過rollback撤銷操作。
可以帶條件的刪除(where),如果不加條件則刪除整張表資料;
delete語句不影響表所占用的區(extend),高水位(high watermark)保持原位置不變;
二、truncate:
ddl語言,會隱式提交,不能回滾,不會觸發觸發器;
truncate會刪除表中所有記錄,這個表和索引所占用的空間會恢復到初始大小,並且將重新設定高水線和所有的索引,預設情況下將空間釋放到minextents個extent,除非使用reuse storage。不會記錄日誌,所以執行速度很快,但不能通過rollback撤消操作(如果一不小心把乙個表truncate掉,也是可以恢復的,只是不能通過rollback來恢復)。
對於外來鍵(foreignkey)約束引用的表,不能使用 truncate table,而應使用不帶 where 子句的 delete 語句。
truncate table不能用於參與了索引檢視的表。
三、drop:
ddl語言,會隱式提交,不能回滾,不會觸發觸發器。
drop語句刪除表結構及所有資料,並將表所占用的空間全部釋放。
drop語句將刪除表的結構所依賴的約束,觸發器,索引,依賴於該錶的儲存過程/函式將保留,但是變為invalid狀態。
使用場景分析:
(1)、truncate與不帶where的delete :只刪除資料,而不刪除表的結構(定義);drop語句將刪除表的結構、被依賴的約束(constrain)、觸發器(trigger)、索引(index);依賴於該錶的儲存過程/函式將被保留,但其狀態會變為:invalid。
(2)、delete語句為dml語言,這個操作會被放到 rollback segment中,事務提交後才生效。如果有相應的 tigger,執行的時候將被觸發。
(3)truncate、drop是dll語言,操作立即生效,原資料不放到 rollback segment中,不能回滾。
(4)在沒有備份情況下,謹慎使用 drop 與 truncate。要刪除部分資料行採用delete且注意結合where來約束影響範圍,回滾段要足夠大;要刪除錶用drop;若想保留表而將表中資料刪除,如果於事務無關,用truncate即可實現。如果和事務有關,或想觸發trigger,還是用delete。
(5)truncate table 表名 速度快,而且效率高。因為: truncate table 在功能上與不帶 where 子句的 delete 語句相同,二者均刪除表中的全部行。但 truncate table 比 delete 速度快,且使用的系統和事務日誌資源少。delete 語句每次刪除一行,並在事務日誌中為所刪除的每行記錄一項。truncate table 通過釋放儲存表資料所用的資料頁來刪除資料,並且只在事務日誌中記錄頁的釋放。
(6)truncate table 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。新行標識所用的計數值重置為該列的種子。如果想保留標識計數值,請改用delete。如果要刪除表定義及其資料,請使用drop table語句。
(7)對於由 foreign key 約束引用的表,不能使用 truncate table,而應使用不帶 where 的 delete 語句,由於truncate table不記錄在日誌中,所以他不能啟用觸發器。
資料庫 資料庫索引
索引是儲存引擎用於快速找到記錄的一種資料結構。索引以檔案的形式儲存在磁碟中。索引可以包含乙個或多個列的值。儲存引擎查詢資料的時候,先在索引中找對應值,然後根據匹配的索引記錄找到對應的資料行。1.b tree索引 2.雜湊索引 myisam和innodb儲存引擎 只支援btree索引,也就是說預設使用...
資料庫 資料庫正規化
關聯式資料庫的設計規範。不同的規範要求被稱為不同的正規化,越高的正規化資料庫冗餘越小。減少資料庫中資料冗餘的過程 1 第一正規化 1nf 在關係模式r中,當且僅當所有屬性只包含原子值,即每個分量都是不可再分的資料項,則稱r滿足1nf。例如表所示的教師職稱情況關係就不滿足1nf。原因在於,該關係模式中...
資料庫 資料庫基礎
什麼是sql 結構化查詢語言 structtured query language sql的作用 啟動mysql.exe,連線伺服器後,就可以使用sql來操作伺服器了。類似php中操作mysql的語句就是sql語句 sql標準 由國際標準化組織 iso 制定的,對dbms 資料庫管理系統 的統一操作...