千家信息网

MySQL中有三种删除数据的方式分别是什么

发表于:2024-11-12 作者:千家信息网编辑
千家信息网最后更新 2024年11月12日,小编给大家分享一下MySQL中有三种删除数据的方式分别是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在 MySQL
千家信息网最后更新 2024年11月12日MySQL中有三种删除数据的方式分别是什么

小编给大家分享一下MySQL中有三种删除数据的方式分别是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

在 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 语句删除表中所有的数据后我们来查看以下现在这张表所占的空间大小(如下图)


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


我们在用 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 。

以上是"MySQL中有三种删除数据的方式分别是什么"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

数据 空间 语句 引擎 时候 大小 数据库 情况 方式 篇文章 语言 一行 事务 事项 内容 原理 大部分 日志 条件 注意事项 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 求生之路怎么在社区添加服务器 服务器储存数据有什么用 数据库压缩算法代码 租服务器 挂机游戏 阿里云服务器 国外访问 张伯伦数据库技术 阆中租房软件开发 境外服务器怎么破案 手机监测摄像服务器 关于网络安全法的内容 软件开发 成本统计 华为2285服务器主板接口 大话手游服务器人数 前端用什么的软件开发 dede数据库备份还原 网络安全只是为了网络数据 延庆区环保软件开发 北京北大青鸟软件开发培训好不好 澳洲网络安全专业留学 阿里巴巴数据库架构 lol韩服服务器没有按键 网络服务器运维与管理 打开cad为什么没有数据库 华为基带软件开发 五星宏辉游戏软件开发培训机构 海南网络安全协会监事会监事 宝鸡库克酷网络技术有限公司 拨打电话响几声无法连接服务器 网络安全情况自查表怎么填写 怎样避免数据库检索到已删除数据
0