Navicat 清空表 vs 截断表,望文生义惹的祸

2024-03-01 03:20

本文主要是介绍Navicat 清空表 vs 截断表,望文生义惹的祸,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、 故障经过

 

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操作。望文生义,没有仔细了解图形化工具各项含义,导致了这次故障。图形化工具虽然方便,但是没法直接看到各个选项背后对应的语句,尤其是经过翻译的中文版,更难看出实际对应的是什么操作。在执行修改操作时很容易踩坑,务必慎重。可以的话建议修改操作还是自己写命令,清楚知道自己在做些什么为好。

二、 Navicat 清空表 vs 截断表区别对比

其实主要也就是mysql delete全表与truncate的对比:

1. 对应SQL不同

  • 清空表: DELETE FROM table_name ;
  • 截断表: TRUNCATE [TABLE] table_name ;

2. 返回值不同

  • 清空操作,会返回删除的行数
  • 截断操作,返回0

3. 自增字段处理

  • 清空操作:不会重置自增字段,继续保留最大值。
  • 截断操作:自增字段值重置为初始值。

4. 效率比较

  • 清空操作: 会扫描全表,表数据越多删的越慢。
  • 截断操作:不扫描全表,效率高,几乎与表数据无关。 (相当于重新创建了表,只保留了表的结构,然后删除掉原有表,效率非常高)

5. 日志记录

  • 清空操作:会记录日志,可恢复。
  • 截断操作:不记录日志,无法恢复。 谨慎使用!

6. 触发器影响

  • 清空操作:相当于执行 DELETE删除语句,会激活触发器。
  • 截断操作:直接对表的操作,不会激活触发器。

参考

MySQL中清空表 delete table 和截断表 truncate table 的区别_HaHa_Sir的博客-CSDN博客

这篇关于Navicat 清空表 vs 截断表,望文生义惹的祸的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/761047

相关文章

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

如何恢复回收站中已删除/清空的文件

回收站清空后如何恢复已删除的文件?是否可以恢复永久删除的文件?或者最糟糕的是,如果文件直接被删除怎么办?本文将向您展示清空回收站后恢复已删除数据的最佳方法。 回收站清空后如何恢复已删除的文件? “回收站清空后我还能恢复已删除的文件吗?” 答案是肯定的,但是在这种情况下您将需要一个  回收站恢复工具 来从回收站中检索文件: 错误/永久删除回收站或任何数字存储设备中的文件 直接删除的文件/

VS Code 调试go程序的相关配置说明

用 VS code 调试Go程序需要在.vscode/launch.json文件中增加如下配置:  // launch.json{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information,

解决服务器VS Code中Jupyter突然崩溃的问题

问题 本来在服务器Anaconda的Python环境里装其他的包,装完了想在Jupyter里写代码验证一下有没有装好,一运行发现Jupyter崩溃了!?报错如下所示 Failed to start the Kernel. ImportError: /home/hujh/anaconda3/envs/mia/lib/python3.12/lib-dynload/_sqlite3.cpython-

VSC++: 括号对称比较

括号的使用规则:大括号,中括号,小括号{[()]};中括号,小括号[()];小括号();大括号、中括号、小括号、中括号、小括号、大括号{[()][()]};大括号,中括号,小括号,小括号{[(())]};大括号,中括号,小括号,小括号{[()()]};小括号不能嵌套,小括号可连续使用。 {[]}、{()}、([])、({})、[{}]、{}、[]、{[}]、[(])都属非法。 char aa[

Navicat Premium上出现Cannot create oci environment错误的解决办法

因为要连接运程的Orcale数据库,由于一些原因连不上,于是我把顶栏里的工具->选项->Oic(最最下面的一个)的oci.dll给替换了,然后就一直出现Cannot create oci environment这个错误 这是由于替换的oci.dll的版本不对,于是替换了各种版本有时候也会出现这个错误 最后就是因为版本不对,先看好安装的版本然后下载一个相对应的 下载地址:http://ww