Truncate/Delete/Drop table的特点和区别
之前一直对Truncate/Delete/Drop认识的不是很清晰,所以特意的翻了一下MySQL5.7 Reference Manual,准备系统的了解一下,这里是一些翻译,外加一点自己的认知。
Truncate的特点
逻辑上truncate table和delete from table_name;相似,但是过程是先drop table,然后在re-create table,如果要清空一个大表的所有数据行,truncate比delete高效;
Truncate是一个DDL操作,一旦执行会隐式提交,这就说明truncate无法rollback,所以执行之前需谨慎;
如果表被锁住,truncate会报错;
如果有外键约束,truncate也会报错;
对于InnoDB/MyISAM表的auto_increment的列,truncate table之后可以重新使用序列值;
truncate table无法触发delete相关的触发器;
Delete的特点
Delete是DML操作,如果没有提交,可以rollback;
对于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
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341