翻譯目的:自己的另一篇博文準備引用
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 獲取 元組使用起來不方便,現實現將資...