MySQL Truncate用法詳解
前言:
當(dāng)我們想要清空某張表時,往往會使用truncate語句。大多時候我們只關(guān)心能否滿足需求,而不去想這類語句的使用場景及注意事項。本篇文章主要介紹truncate語句的使用方法及注意事項。
1.truncate使用語法
truncate的作用是清空表或者說是截斷表,只能作用于表。truncate的語法很簡單,后面直接跟表名即可,例如:truncate table tbl_name 或者 truncate tbl_name 。
執(zhí)行truncate語句需要擁有表的drop權(quán)限,從邏輯上講,truncate table類似于delete刪除所有行的語句或drop table然后再create table語句的組合。為了實現(xiàn)高性能,它繞過了刪除數(shù)據(jù)的DML方法,因此,它不能回滾。盡管truncate table與delete相似,但它被分類為DDL語句而不是DML語句。
2.truncate與drop,delete的對比
上面說過truncate與delete,drop很相似,其實這三者還是與很大的不同的,下面簡單對比下三者的異同。
truncate與drop是DDL語句,執(zhí)行后無法回滾;delete是DML語句,可回滾。 truncate只能作用于表;delete,drop可作用于表、視圖等。 truncate會清空表中的所有行,但表結(jié)構(gòu)及其約束、索引等保持不變;drop會刪除表的結(jié)構(gòu)及其所依賴的約束、索引等。 truncate會重置表的自增值;delete不會。 truncate不會激活與表有關(guān)的刪除觸發(fā)器;delete可以。 truncate后會使表和索引所占用的空間會恢復(fù)到初始大小;delete操作不會減少表或索引所占用的空間,drop語句將表所占用的空間全釋放掉。3.truncate使用場景及注意事項
通過前面介紹,我們很容易得出truncate語句的使用場景,即該表數(shù)據(jù)完全不需要時可以用truncate。如果想刪除部分?jǐn)?shù)據(jù)用delete,注意帶上where子句;如果想刪除表,當(dāng)然用drop;如果想保留表而將所有數(shù)據(jù)刪除且和事務(wù)無關(guān),用truncate即可;如果和事務(wù)有關(guān),或者想觸發(fā)trigger,還是用delete;如果是整理表內(nèi)部的碎片,可以用truncate然后再重新插入數(shù)據(jù)。
無論怎樣,truncate表都是高危操作,特別是在生產(chǎn)環(huán)境要更加小心,下面列出幾點注意事項,希望大家使用時可以做下參考。
truncate無法通過binlog回滾。 truncate會清空所有數(shù)據(jù)且執(zhí)行速度很快。 truncate不能對有外鍵約束引用的表使用。 執(zhí)行truncate需要drop權(quán)限,不建議給賬號drop權(quán)限。 執(zhí)行truncate前一定要再三檢查確認(rèn),最好提前備份下表數(shù)據(jù)。以上就是MySQL Truncate用法詳解的詳細(xì)內(nèi)容,更多關(guān)于MySQL Truncate的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. ORA-06512數(shù)字或值錯誤字符串緩沖區(qū)太小異常詳解2. Oracle兩個基本概念了解體系結(jié)構(gòu)3. Oracle數(shù)據(jù)庫碎片整理4. Mybatis Plus 自定義方法實現(xiàn)分頁功能的示例代碼5. Vista下安裝SQL Server 2005,附加數(shù)據(jù)庫報錯6. MySQL中庫的基本操作指南(推薦!)7. sqlserver給表添加新字段、給表和字段添加備注、更新備注及查詢備注(sql語句)8. DB2新手使用的一些小筆記:新建實例、數(shù)據(jù)庫路徑不存在、客戶端連接 .9. sqlserver數(shù)據(jù)庫導(dǎo)入方法的詳細(xì)圖文教程10. Mysql查詢優(yōu)化之IN子查詢優(yōu)化方法詳解
