Truncate用法詳解

前言:性能

當咱們想要清空某張表時,每每會使用truncate語句。大多時候咱們只關心可否知足需求,而不去想這類語句的使用場景及注意事項。本篇文章主要介紹truncate語句的使用方法及注意事項。code

1.truncate使用語法

truncate的做用是清空表或者說是截斷表,只能做用於表。truncate的語法很簡單,後面直接跟表名便可,例如: truncate table tbl_name  或者 truncate tbl_name 。索引

執行truncate語句須要擁有表的drop權限,從邏輯上講,truncate table相似於delete刪除全部行的語句或drop table而後再create table語句的組合。爲了實現高性能,它繞過了刪除數據的DML方法,所以,它不能回滾。儘管truncate table與delete類似,但它被分類爲DDL語句而不是DML語句。事務

2.truncate與drop,delete的對比

上面說過truncate與delete,drop很類似,其實這三者仍是與很大的不一樣的,下面簡單對比下三者的異同。table

  • truncate與drop是DDL語句,執行後沒法回滾;delete是DML語句,可回滾。
  • truncate只能做用於表;delete,drop可做用於表、視圖等。
  • truncate會清空表中的全部行,但表結構及其約束、索引等保持不變;drop會刪除表的結構及其所依賴的約束、索引等。
  • truncate會重置表的自增值;delete不會。
  • truncate不會激活與表有關的刪除觸發器;delete能夠。
  • truncate後會使表和索引所佔用的空間會恢復到初始大小;delete操做不會減小表或索引所佔用的空間,drop語句將表所佔用的空間全釋放掉。

3.truncate使用場景及注意事項

經過前面介紹,咱們很容易得出truncate語句的使用場景,即該表數據徹底不須要時能夠用truncate。若是想刪除部分數據用delete,注意帶上where子句;若是想刪除表,固然用drop;若是想保留表而將全部數據刪除且和事務無關,用truncate便可;若是和事務有關,或者想觸發trigger,仍是用delete;若是是整理表內部的碎片,能夠用truncate而後再從新插入數據。權限

不管怎樣,truncate表都是高危操做,特別是在生產環境要更加當心,下面列出幾點注意事項,但願你們使用時能夠作下參考。語法

  • truncate沒法經過binlog回滾。
  • truncate會清空全部數據且執行速度很快。
  • truncate不能對有外鍵約束引用的表使用。
  • 執行truncate須要drop權限,不建議給帳號drop權限。
  • 執行truncate前必定要再三檢查確認,最好提早備份下表數據。

WeChat

相關文章
相關標籤/搜索