Truncate的特点
truncate table和delete from table_name;相似,但是truncate table是先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
原文链接:https://blog.51cto.com/darrenmemos/2288350
本文详细对比了SQL中的truncate, delete与drop三种操作的特点与应用场景。truncate用于高效清空大表数据,但不可回滚;delete提供更灵活的数据行删除,并支持条件过滤与回滚;drop则彻底从数据库及系统层面删除表及其所有相关文件。
4696

被折叠的 条评论
为什么被折叠?



