共計 1706 個字符,預計需要花費 5 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
這篇文章給大家分享的是有關 MySQL 中刪除表操作實現有哪些區別的內容。丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,一起跟隨丸趣 TV 小編過來看看吧。
本文主要講 mysql 中三種刪除表的操作,delete 語句、truncate 語句以及 drop 語句的區別:
簡介
delete
1、刪除整張表的數據:
delete from table_name;
2、刪除部分數據,添加 where 子句:
delete from table_name where...;
3、說明
1)、屬于 DML 語言,每次刪除一行,都在事務日志中為所刪除的每行記錄一項。產生 rollback,事務提交之后才生效; 如果有相應的 trigger, 執行的時候將被觸發,如果刪除大數據量的表速度會很慢。
2)、刪除表中數據而不刪除表的結構 (定義),同時也不釋放空間。
truncate
1、只能操作表,將表中數據全部刪除,在功能上和不帶 where 子句的 delete 語句相同:
truncate table table_name;
2、說明
1)、默認情況下,truncate 通過釋放存儲表數據所用的數據頁來刪除數據,并且只在事務日志中記錄頁的釋放。所以使用的系統和事務日志資源少,可以使用 reuse storage; truncate 會將高水線復位 (回到最開始).
2 )、truncate 是 DDL 語言, 操作立即生效, 自動提交,原數據不放到 rollback segment 中, 不能回滾. 操作不觸發 trigger.
3 )、刪除內容、釋放空間但不刪除表的結構 (定義)。
drop
1、drop 語句將刪除表的結構,以及被依賴的約束 (constrain), 觸發器 (trigger), 索引 (index);
drop table table_name;
2、說明
1)、刪除之后,依賴于該表的存儲過程 / 函數將保留, 但是變為 invalid 狀態.
2)、drop 也屬于 DDL 語言,立即執行,執行速度最快
3)、刪除內容和定義,釋放空間。
區別
1、表和索引所占空間:
當表被 TRUNCATE 后,這個表和索引所占用的空間會恢復到初始大小;
DELETE 操作不會減少表或索引所占用的空間;
DROP 語句將表所占用的空間全釋放掉。
2、應用范圍:
TRUNCATE 只能對 table;
DELETE 可以是 table 和 view。
3、執行速度:drop truncate delete
4、delete from 刪空表后,會保留一個空的頁,truncate 在表中不會留有任何頁。
5、DELETE 語句執行刪除的過程是每次從表中刪除一行,并且同時將該行的刪除操作作為事務記錄在日志中保存以便進行進行回滾操作。
TRUNCATE TABLE 則一次性地從表中刪除所有的數據并不把單獨的刪除操作記錄記入日志保存,刪除行是不能恢復的。并且在刪除的過程中不會激活與表有關的刪除觸發器。執行速度快。
6、當使用行鎖執行 DELETE 語句時,將鎖定表中各行以便刪除。truncate 始終鎖定表和頁,而不是鎖定各行。
7、如果有 identity 產生的自增 id 列,delete from 后仍然從上次的數開始增加,即種子不變;
使用 truncate 刪除之后,種子會恢復到初始值。
總結
1、delete 語句可以使用 where 子句實現部分刪除,而 truncate 不可以,會將表中的整個數據全部刪除,使用時,可以按需求選擇;
2、如果想從表中刪除所有的數據,不要使用 delete,可以使用 truncate 語句,因為這樣執行速度更快。truncate 語句實際是刪除原來的表然后重新建立一個新表;
3、在沒有備份情況下,謹慎使用 drop 與 truncate。要刪除表結構使用 drop;
4、對于由 FOREIGN KEY 約束引用的表,不能使用 TRUNCATE TABLE,而應使用不帶 WHERE 子句的 DELETE 語句。由于 TRUNCATE TABLE 不記錄在日志中,所以它不能激活觸發器。
感謝各位的閱讀!關于“MySQL 中刪除表操作實現有哪些區別”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
向 AI 問一下細節