1. 程式人生 > 實用技巧 >關於MySQL中的TRUNCATE語句

關於MySQL中的TRUNCATE語句

語法

TRUNCATE [table_name];

作用

快速清空一張表,在邏輯功能上相當於刪除所有行的DELETE語句;

原理

實際上是先將表DROP,再重新建立一個表名相同的空資料表;

與DELETE語句的主要區別:

  • 對於innoDB的儲存引擎來說,因為innoDB是支援外來鍵約束的,所以在有外來鍵限制的情況下執行TRUNCATE TABLE語句時會將其對映到DELETE語句上;否則使用快速刪減。重新設定AUTO_INCREAMENT計數器,這個時候不需要考慮外來鍵的約束。
  • 對於其他引擎來說,主要有以下區別:
    1. TRUNCATE會刪除取消原表並建立一個空表,速度上比DELETE一行一行刪除快速。
    2. TRUNCATE不能保證對事務安全;對於事務處理與表鎖定的處理會發生錯誤。
    3. 使用TRUNCATE不能返回被刪除行的數目。
    4. 只要建立表有正確的定義表結構,那麼這個表不論是資料破壞或者索引檔案丟失,都可以使用TRUNCATE再重新把表建立為一張空表。
    5. 管理表的程式不會記得最後的AUTO_INCREMENT的值,但是AUTO_INCREMENT總會從頭開始進行計數。
    6. 當TRUNCATE作用於帶分割槽的表時,表的資料和索引檔案會被刪除並且重新建立表,且分割槽定義檔案不會受到影響。