mysql-删除方式对比-drop、truncate、delete
目录
- drop、truncate、delete的区别
- 1、执行速度
- 2、SQL执行命令分类
- 3、回滚
- 4、自增初始值
drop、truncate、delete的区别
区别 | drop | truncate | delete |
---|---|---|---|
语法 | drop(丢弃数据): DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [,tbl_name] | ||
truncate (清空数据) : truncate table 表名 | delete(删除数据) :delete from table_name [where…] [order by…] [limit…] | ||
执行速度 | 快 | 较快 | 慢 |
命令分类 | DDL | DDL | DML |
删除对象 | 删除整张表和表结构,以及表的索引、约束和触发器 | 只删除表数据,表的结构、索引、约束等会被保留。 | 只删除表的全部或部分数据,表结构、索引、约束等会被保留。 |
删除条件(where) | 不支持 | 不支持 | 支持 |
回滚 | 不支持 | 不支持 | 支持 |
自增初始值 | - | 重置 | 不重置 |
1、执行速度
delete 是逐行执行的,并且在执行时会把操作日志记录下来,以备日后回滚使用,所以 delete 的执行速度是比较慢的;
而 truncate 的操作是先复制一个新的表结构,再把原先的表整体删除,所以它的执行速度居中,而 drop 的执行速度最快。
2、SQL执行命令分类
SQL 分为以下 3 类:
- DDL【DataDefinitionLanguage】数据定义语言,用来维护存储数据的结构代表指令: create、drop、alter、truncate。
- DML【DataManipulationLanguage】数据操纵语言,用来对数据进行操作代表指令:insert,delete,update,
- DML中又单独分了一个 DQL,数据查询语言,代表指令是 select。
- DCL【DataControlLanguage】数据控制语言,主要负责权限管理和事务代表指令:grant,revoke,commit。
其中 delete 属于 DML,而 truncate 和 drop 属于 DDL。
PS:truncate 是先复制一个新的表结构,再把原有旧表结构和数据一起删除,所以它属于数据定义语言 DDL,而非数据操纵语言 DML。
3、回滚
truncate 和 drop 是立即执行,且不能恢复;而 delete 会走事务,可以撤回和恢复。
4、自增初始值
truncate 会重置自增列为 1,而 delete 不会重置自增列。
转载链接