当前位置:网站首页>面试突击58:truncate、delete和drop的6大区别!
面试突击58:truncate、delete和drop的6大区别!
2022-06-22 15:44:00 【Java中文社群】

作者 | 磊哥
来源 | Java面试真题解析(ID:aimianshi666)
转载请联系授权(微信ID:GG_Stone)
在 MySQL 中,使用 truncate、delete 和 drop 都可以实现表删除,但它们 3 个的使用场景和执行效果完全不同,接下来我们来盘点一下。
truncate、delete、drop区别概述
它们 3 个的区别如下表所示:
| 区别点 | drop | truncate | delete |
|---|---|---|---|
| 执行速度 | 快 | 较快 | 慢 |
| 命令分类 | DDL(数据定义语言) | DDL(数据定义语言) | DML(数据操作语言) |
| 删除对象 | 删除整张表和表结构,以及表的索引、约束和触发器。 | 只删除表数据,表的结构、索引、约束等会被保留。 | 只删除表的全部或部分数据,表结构、索引、约束等会被保留。 |
| 删除条件(where) | 不能用 | 不能用 | 可使用 |
| 回滚 | 不可回滚 | 不可回滚 | 可回滚 |
| 自增初始值 | - | 重置 | 不重置 |
接下来我们用案例来演示一下它们的区别。
准备工作
正式开始之前,我们先来创建一个用户表和用户测试数据,方便后续演示使用:
CREATE TABLE `userinfo` (
`id` int(11) NOT NULL AUTO_INCREMENT comment '编号',
`name` varchar(250) NOT NULL comment '姓名' unique,
`balance` decimal(10,2) NOT NULL DEFAULT '0.00' comment '账户余额',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
insert into userinfo values(1,'张三',1000),(2,'李四',500),(3,'王五',2000),(4,'李六',500);创建的表结构和数据如下图所示:
1.删除对象不同
delete 和 truncate 只删除表数据,不删除表结构,其中 delete 删除之后的结果如下:
我们先将表还原到初始状态,再使用 truncate 执行删除操作,执行结果如下图所示:
把表还原到初始状态,执行 drop 删除语句,执行结果如下图所示:
从上述结果可以看出,delete 和 truncate 只删除表数据,而 drop 把表结构和表数据都删除了。
2.删除条件支持不同
truncate 和 drop 不支持添加 where 条件,而 delete 支持 where 条件,如下图所示:
3.命令分类不同
truncate、delete 和 drop 所属 SQL 分类不同,SQL 分为以下 3 类:
DDL【Data Definition Language】数据定义语言,用来维护存储数据的结构代表指令: create、drop、alter、truncate。
DML【Data Manipulation Language】数据操纵语言,用来对数据进行操作代表指令:insert,delete,update,DML 中又单独分了一个 DQL,数据查询语言,代表指令是 select。
DCL【Data Control Language】数据控制语言,主要负责权限管理和事务代表指令:grant,revoke,commit。
其中 delete 属于 DML,而 truncate 和 drop 属于 DDL。
PS:truncate 是先复制一个新的表结构,再把原有旧表结构和数据一起删除,所以它属于数据定义语言 DDL,而非数据操纵语言 DML。
4.回滚支持不同
delete 属于 DML 支持事务回滚操作,而 truncate 和 drop 属于 DDL,执行之后立马生效,且数据是不可恢复的,接下来我们来验证一下。首先先将 MySQL 的自动事务提交关闭,自动事务提交的默认值是“ON”也就是开启了自动提交,如下图所示:
我们使用以下命令将自动提交(事务)关掉:
set autocommit=off;再次查询事务自动提交的设置结果如下:
接下来我们演示一下 delete 的回滚操作,如下图所示:
从上述结果可以看出 delete 之后是可以进行恢复(回滚)的,而 truncate 和 drop 之后是不能回滚的,各位老铁可以使用相同的方法自行测试一下后两种 SQL 的执行。
5.自增初始化不同
delete 不会重置自增字段的初始值,如下图所示:
而 truncate 会重置自增字段的初始值,如下图所示:
6.执行速度不同
delete 是逐行执行的,并且在执行时会把操作日志记录下来,以备日后回滚使用,所以 delete 的执行速度是比较慢的;而 truncate 的操作是先复制一个新的表结构,再把原先的表整体删除,所以它的执行速度居中,而 drop 的执行速度最快。
总结
truncate、drop 和 delete 的区别主要有以下 6 点:
执行速度:drop > truncate > detele。
delete 和 truncate 只删除表数据,而 drop 会删除表数据和表结构以及表的索引、约束和触发器。
delete 可以加 where 条件实现部分数据删除,而 truncate 和 drop 不能加 where 条件是整体删除。
truncate 和 drop 是立即执行,且不能恢复;而 delete 会走事务,可以撤回和恢复。
truncate 会重置自增列为 1,而 delete 不会重置自增列。
truncate 和 drop 是 DDL 语句,而 delete 是 DML 语句。
是非审之于己,毁誉听之于人,得失安之于数。
公众号:Java面试真题解析
面试合集:https://gitee.com/mydb/interview

往期推荐面试突击55:delete、drop、truncate有什么区别?

边栏推荐
- 快速掌握 ASP.NET 身份认证框架 Identity - 用户注册
- High availability ResourceManager
- Database mysql master-slave scheme
- Huawei cloud recruits partners in the field of industrial intelligence to provide strong support + commercial realization
- Post to asp Net core length limitation and solution when transferring data
- MySQL stored procedure exception handling error code: 1337
- Cross platform brake browser
- 轻松上手Fluentd,结合 Rainbond 插件市场,日志收集更快捷
- Spark streaming receiver startup and data receiving
- 基于.NetCore开发博客项目 StarBlog - (12) Razor页面动态编译
猜你喜欢

企业级软件开发新模式:低代码
数据库mysql 主从方案

linux系统维护篇:mysql8.0.13源码下载及安装之“傻瓜式”操作步骤(linux-centos6.8)亲测可用系列

High availability ResourceManager

clickhouse 21.x 集群四分片一副本部署

来厦门了!线上交流限额免费报名中
![[Alibaba cloud server - install MySQL version 5.6 and reinstall]](/img/5a/50b1de5f58235f6d11f6ad1eecc455.png)
[Alibaba cloud server - install MySQL version 5.6 and reinstall]

##Kibana+ELK集群日志处理

网传学习通1.7亿密码泄露!有什么补救措施?

Hello playwright: (7) simulate keyboard and mouse
随机推荐
Recommend 7 super easy-to-use terminal tools - ssh+ftp
MTLs guidelines for kubernetes engineers
Partage de l'architecture du système de paiement du Groupe letv pour traiter 100 000 commandes simultanées élevées par seconde
Thoughts on joint primary key
Is the CSC securities account given by qiniu school true? Is it safe to open an account
Linux system maintenance: mysql8.0.13 source code download and installation "fool" operation steps (Linux centos6.8) test available series
JMeter use case
What should I do if I can't hear a sound during a video conference?
系统吞吐量、TPS(QPS)、用户并发量、性能测试概念和公式
jMeter使用案例
WPF 实现星空效果
有同学问PHP要学什么框架?
web技术分享| 【高德地图】实现自定义的轨迹回放
Vs2017 solution to not displaying qstring value in debugging status
Blazor University (31)表单 —— 验证
数据库mysql 主从方案
Figure operation flow of HAMA BSP Model
mysql账号增删改、数据导入导出命令举例
WPF效果第一百九十篇之再耍ListBox
团队管理|如何提高技术 Leader 的思考技巧?



