言简意赅的说一下
- delete 和 truncate 仅仅删除表数据,truncate会改变表的高水位线,drop 连表数据和表结构一起删除
- delete 是 DML 语句,操作完以后如果没有不想提交事务还可以回滚,truncate 和 drop 是 DDL 语句,操作完马上生效,不能回滚
- 执行的速度上,drop>truncate>delete
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_incr