使用MySQL如何删库跑路
创始人
2024-11-18 13:43:27
0次

在 MySQL 中有三种删除数据的方式,分别是 delete、drop 和 truncate。这三种方式用起来简单,但是背后的原理和注意事项估计大部分开发人员并不清楚,下面我就来讲解以下原理以及注意事项。

一、delete

Delete 是数据库 DML 操作语言,在删除数据的时候只会删除数据而不会删除数据所在表的表结构,并且在删除数据的时候会执行事务和触发 trigger。而且如果你所使用的数据库引擎是 InnoDB 的话 MySQL 会在执行删除数据操作的时候只把数据标注为已删除而不去真正的删除数据,因此在这种情况下如果你使用 Delete 删除数据的时候会发现表大小并没有改变。

但是当你的数据库引擎是 MyISAM 的情况下执行 delete from table  语句会真正的删除表中的数据并释放空间的,如果你想让 MyISAM 引擎也能实现 InnoDB 引擎假删除的效果的话,你需要在 Delete 语句后面加上 Where 条件即可,例如 delete from user where age<18 这段语句执行后符合条件的数据将会标注为删除,并且所占空间不释放。

这时肯定有杠精的小朋友会说:“我就想使用 InnoDB 引擎,我也想释放被删除数据所占用的空间。”这种想法 MySQL 为我们提供了解决方案,那就是 optimize table 语句,我们来看一下例子:我们用 Delete 语句删除表中所有的数据后我们来查看以下现在这张表所占的空间大小(如下图)

使用MySQL如何删库跑路

从上图中我们可以看到我们删除了 book 表中的所有数据,但是该表所占用的空间大小几乎没发生变化。这时我们执行 optimize table 语句后再次查看表的空间大小,我们发现表的大小变成了 0.02M,只剩下了表结构的大小了(如下图)

使用MySQL如何删库跑路

我们在用 Delete 语句删除数据的时候需要注意的是 delete 操作是一行一行的执行的,并且会将每行的删除日志记录在 redo 和 undo 表空间中以方便日后回滚和重做,这样就产生大量的日志进而占用大量的空间。因此当我们在进项大规模删除数据的时候不建议使用 Delete 语句。

Tip:这里有一个比较有意思的地方:虽说被删除数据所占用的空间没有被释放,但是当我们执行 Insert 操作的时候这部分未被释放的空间依然是可以被重用的。

二、truncate 和 drop

truncate 是数据库 DDL 语言,它和 delete 最大的区别是它不走事务数据也不放在 rollback segment 里,同时也不会触发 trigger, 因此执行 truncate 语句后会立即删除指定的数据且无法恢复,并释放数据所占用的空间(不管使用的数据库引擎是 InnoDB 还是 MyISAM )。truncate 语句一般用于快速清空表中数据并需要重置 auto_increment 值的情况。

关于重置 auto_increment 值需要有如下两点注意:

  • 在使用 InnoDB 引擎的情况下如果使用 truncate autoincrement会重置为 1 ,但是如果使用 delete 则 autoincrement 在重启 MySQL 之前仍然保持当前值,重启值后重置为 1 ;
  • 在使用 MyISAM 引擎的情况下如果使用 truncate autoincrement会重置为 1 ,但如果使用 delete 则 autoincrement 仍然保持当前值。

drop 同样是数据库 DDL 语言,它和 truncate 一样一旦执行将立即删除表和依赖、触发器、索引,但是会保留和该表相关的存储过程以及函数,并将状态改为 invalid 。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...