TRUNCATE 使用之MySQL官方文件說明

2021-07-22 18:22:10 字數 2753 閱讀 3952



翻譯目的:自己的另一篇博文準備引用

13.1.33 truncate table syntax

truncate [table] tbl_name

truncate table完全清空一張表,該操作需要使用者具有刪除表的許可權(

drop privilege)。

邏輯上來說,truncate table

相較delete

語句有相似之處,即清空所有的表記錄,然後它

會再執行包括刪除表和重建表在內的一系列恢復

表結構的語句。

物理上,

為了提高效能,

它規避了delete語句以

dml清除資料的

方式。因此

,一方面truncate

操作不能被回滾,它

不會觸發delete

觸發器;另一方面

它不能用於操作有

外來鍵關係

的innodb

父子表。

雖然truncate table

與delete語法

作用相似

,但與dml

語句的delete

不同,它被列為

ddl語句。

在mysql5.6裡,

它與delete語法在

以下方面

存在不同之處:

ltruncate操作是

刪除表然後重建表,這比

delete一行一行

地清除資料更快

,尤其對於

一張大表。 l

truncate

操作產生

乙個隱式提交,

因此不能回滾。 l

如果會話顯式

鎖表truncate

操作不能執行。

l如果truncate

操作的表

是innodb表或者

ndb表,而

該錶與其他若干

有外來鍵約束

關係的表

相關聯,則

操作失敗。

外來鍵約束關係

建立在同一張表的字段之間除外。

ltruncate

操作不能返回

乙個有意義的

清除了多少行記錄的數值

。返回的

結果通常是

「受影響的行 0」,

這可以理解為「

沒有返回資訊」。

l只要表定義檔案

tbl_name

.frm

是有效的,即便資料

和索引檔案

被損壞,

truncate操作依然

可以重建

(空)表。

l自增長

的字段被

重新設定為

初始值。

這甚至對通常不再

重新使用序列值

的myisam

和innodb

表都有效。

l當用於

分割槽表時,

truncate

操作會維持分割槽,即資料索引檔案被

刪除和重建

而分割槽定義檔案

(.par)

不受影響。

ltruncate

操作不會觸發

delete

觸發器。

對一張表

執行truncate

操作會關閉所有被

「handler open」

開啟的handler。

truncate

操作通過

先刪除表

然後緊接著

建立表,即

作為ddl

而不是dml的

方式,被

用來處理二進位制日誌以實現(主從

)複製的

目的。這是基於當

使用innodb

或者其他事務型儲存引擎,

而事務隔離級別(未提交讀

或提交讀)

不支援基於語句

的日誌模式

,在語句

或者混合

日誌模式下這些

語句就不能

被寫進日誌以及進行(主從

)複製。(b

ug #36763)

而且,先前所述同樣適用於使用

innodb的複製

從伺服器。

在乙個設定了比較大

的innodb

快取池以及

啟用了innodb自適應

雜湊索引

的系統上,

由於「近期最少使用

」記憶體管理演算法的掃瞄,truncate

操作可能導致

系統系能

短暫下降,

這出現在移除innodb

表自適應雜湊索引

記錄的時候

。這個問題在

mysql5.5.23版本「

drop table

」部分已經被提出(

bug #13704145

, bug #64284

),而且仍然是

truncate

操作的乙個已知的問題(

bug #68184)。

truncate操作可以被用於「

performance schema

」系統庫里的彙總表,但效果是重置表中的概要欄位為0或者

null

,而不是清空記錄。詳見章節

22.9.9

,「performance schema summary tables」。

Salesforce使用truncate清空資料庫

如果想快速的清空mysql中的表,可以使用truncate命令。truncate能夠快速的,對資料進行無差別的清空。在mysql中使用truncate的語法是 truncate table table name 在salesforce中同樣提供了truncate功能。不過只是提供乙個按鈕,並不提供任...

Truncate的使用詳解

刪除表中資料的方法有 delete 和 truncate,其中truncate table用於刪除表中的所有行,而不記錄單個行刪除操作 truncate table 與沒有 where 子句的 delete 語句類似,但是,truncate table 速度更快,使用的系統資源和事務日誌資源更少。下...

python使用peewee實現mysql資料操作

peewee可用class來建立表,增刪改查,應該是相對餘單錶 本人幾乎沒用過,自以為如此 想實現sql查詢,得到list,比如這樣的結果 但是查詢結果是全是資料 元組 且找不到列名,後dir後逐個嘗試發現列名可以使用result.description j 0 獲取 元組使用起來不方便,現實現將資...