Truncate/Delete/Drop table的特色和區別

以前一直對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

https://dev.mysql.com/doc/refman/5.7/en/delete.html

https://dev.mysql.com/doc/refman/5.7/en/drop-table.html

相關文章
相關標籤/搜索