网站首页 > 技术文章 正文
Navicat工具图形化界面执行中,“清空表”指的是delete全表,“截断表”才是truncate操作。
一、 故障描述及处理
1. 故障现象
收到告警mysql服务器剩余空间突然变成0了,赶紧登上去看了下,发现binlog突然增长10几G,由于服务器磁盘本身不大,就被占满了。登录mysql发现有两个可疑的全表delete慢sql:delete from tabname 在执行,恰好开发来问业务表删除特别慢怎么办,基本确定了是由于开发全表delete数据导致的问题。
2. 故障处理
把delete语句kill掉;手动清理几个binlog释放空间;待从库同步后清理异常增长10几G的大binlog。之后故障恢复。
3. 望文生义
以上其实就是很普通的全表delete大事务产生了过多binlog导致磁盘空间满的问题。
处理完在问开发为什么全表删除不用truncate要用delete的时候,开发反馈是通过Navicat工具图形化界面执行的,看到有一个“清空表”选项,按照平时的说法清空指的就是truncate,于是选择了“清空表”选项。然而实际上,Navicat的“清空表”指的是delete全表,“截断表”才是truncate操作。望文生义,没有仔细了解图形化工具各项含义,导致了这次故障。图形化工具虽然方便,但是没法直接看到各个选项背后对应的语句,尤其是经过翻译的中文版,更难看出实际对应的是什么操作。在执行修改操作时很容易踩坑,务必慎重。可以的话建议修改操作还是自己写命令,清楚知道自己在做些什么为好。
4.为什么drop表会比delete数据快呢,这也是一个重要知识点。
DROP | TRUNCATE | DELETE | |
删除内容 | 删除整张表数据,表结构以及表的索引、约束和触发器 | 删除全部数据 | 删除部分数据(可带where条件) |
语句类型 | DDL | DDL | DML |
效率 | 最高 | 较高 | 较低 |
回滚 | 无法回滚 | 无法回滚 | 可以回滚 |
自增值 | - | 重置 | 不重置 |
二、 Navicat 清空表 vs 截断表区别对比
其实主要也就是mysql delete全表与truncate的对比:
1. 对应SQL不同
清空表: DELETE FROM table_name ;
截断表: TRUNCATE [TABLE] table_name ;
2. 返回值不同
清空操作:会返回删除的行数;
截断操作:返回0;
3. 自增字段处理
清空操作:不会重置自增字段,继续保留最大值。
截断操作:自增字段值重置为初始值。
4. 效率比较
清空操作: 会扫描全表,表数据越多删的越慢。
截断操作:不扫描全表,效率高,几乎与表数据无关。 (相当于重新创建了表,只保留了表的结构,然后删除掉原有表,效率非常高)
5. 日志记录
清空操作:会记录日志,可恢复。
截断操作:不记录日志,无法恢复。 谨慎使用!
6. 触发器影响
清空操作:相当于执行 DELETE删除语句,会激活触发器。
截断操作:直接对表的操作,不会激活触发器。
三、总结
一切的问题源自没有仔细了解Navicat图形化工具各项含义,导致了故障发生。图形化工具虽然方便,但是没法直接看到各个选项背后对应的语句,尤其是经过翻译的中文版,更难看出实际对应的是什么操作。在执行修改操作时很容易踩坑,务必慎重。可以的话建议修改操作还是自己写命令,清楚知道自己在做些什么为好。
欢迎关注【辉哥传书vlog】头条号,感兴趣的小伙伴记得『点赞、评论、收藏』,您的支持就是对我最大的鼓励。
猜你喜欢
- 2024-09-23 (二)SQL数据模式、表、索引的建立与删除
- 2024-09-23 当我们输入一条SQL查询语句时,发生了什么?
- 2024-09-23 超详细!SQL语法速成就靠这篇了!(下)
- 2024-09-23 sql语句(sql语句增删改查)
- 2024-09-23 数据库触发器(数据库触发器的创建和使用)
- 2024-09-23 SQL创建触发器(sql创建触发器禁止修改成绩)
- 2024-09-23 MySQL_08_触发器(mysql触发器的使用及语法)
- 2024-09-23 被低估的SQL(被低估的中国半导体龙头)
- 2024-09-23 都2021年了不会还有人不会用SQL吧
- 2024-09-23 Impala工作常用函数和诡异bug问题总结[1]
- 1514℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 573℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 513℃MySQL service启动脚本浅析(r12笔记第59天)
- 486℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 486℃启用MySQL查询缓存(mysql8.0查询缓存)
- 469℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 449℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 446℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (83)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)