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

相关文章
相关标签/搜索