以前一直對Truncate/Delete/Drop認識的不是很清晰,因此特地的翻了一下MySQL5.7 Reference Manual,準備系統的瞭解一下,這裏是一些翻譯,外加一點本身的認知。html
Truncate的特色mysql
邏輯上truncate table和delete from table_name;類似,可是過程是先drop table,而後在re-create table,若是要清空一個大表的全部數據行,truncate比delete高效;sql
Truncate是一個DDL操做,一旦執行會隱式提交,這就說明truncate沒法rollback,因此執行以前需謹慎;數據庫
若是表被鎖住,truncate會報錯;ide
若是有外鍵約束,truncate也會報錯;spa
對於InnoDB/MyISAM表的auto_increment的列,truncate table以後能夠從新使用序列值;翻譯
truncate table沒法觸發delete相關的觸發器;orm
Delete的特色htm
Delete是DML操做,若是沒有提交,能夠rollback;rem
對於InnoDB/MyISAM表的auto_increment的列,delete table以後能夠沒法從新使用序列值,可是重啓以後能夠從新使用序列;
Delete from table_name後面必定要跟where條件,不然會刪除表的全部行;
Drop的特色
Drop table除了在數據庫層面刪除表,還會在系統層面刪除xxx.ibd,xxx.frm(InnoDB表)或 xxx.MYD,xxx.MYI,xxx.frm (MyISAM)等文件;
drop table if exists table_name能夠防止表不存在的報錯,可是會有一個warning;
drop table也會隱式提交,除了臨時表;
參考連接
https://dev.mysql.com/doc/refman/5.7/en/truncate-table.html