MySQL删除数据的三种方法是什么?

分类:编程技术 时间:2024-02-20 15:25 浏览:0 评论:0
0
小编跟大家分享一下MySQL删除数据的三种方式是什么。相信大多数人对此还不是很了解,所以分享这篇文章供大家参考。希望您读完这篇文章后能有所收获。我们一起来了解一下吧!

MySQL中删除数据有三种方式,分别是delete、drop和truncate。这三种方法使用起来很简单,但是其背后的原理和注意事项可能大多数开发者都不太清楚。下面我来解释一下原则和注意事项。

1.删除

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

但是当你的数据库引擎是MyISAM时,执行delete from table语句实际上会删除表中的数据并释放空间。如果想让MyISAM引擎也实现InnoDB引擎的假删除效果,需要在Delete语句后添加Where条件,例如delete from user where Age<18。该语句执行后,符合条件的数据将被标记为已删除,且占用的空间不会被释放。

这个时候,一定有一些聪明的孩子会说:“我只是想使用InnoDB引擎,而且我也想释放删除数据占用的空间。” MySQL为我们提供了这个想法的解决方案。这就是优化表语句。我们来看一个例子:我们使用Delete语句删除了表中的所有数据后,我们来查看一下sp表占用的ace(如下图)


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


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

提示:这里有一个有趣的点:虽然被删除的数据占用的空间还没有被释放,但是这个par未释放的空间在我们执行Insert操作时仍然可以被重用。 。

2.截断和删除

截断是一种数据库 DDL 语言。它与delete最大的区别在于,它不存储事务数据,也不将其放入回滚段中。 ,触发器不会同时触发,所以执行truncate语句后,指定的数据会立即被删除且无法恢复,并且该数据占用的空间会被释放(无论使用的数据库引擎是否为InnoDB 或 MyISAM)。 truncate语句一般用于快速清除表中的数据,需要重置auto_increment值。

重置auto_increment值有两点需要注意:

使用InnoDB引擎时,如果使用truncate autoincrement会重置为1,但如果使用delete,autoincrement会被重置为1将被重置为1。当前值仍将保持在res之前启动MySQL,重启后该值会重置为1;

使用MyISAM引擎时,如果使用truncate autoincrement,则会重置为1,但如果使用delete,autoincrement仍然会保持当前值。 。

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

以上就是《MySQL删除数据的三种方式?》一文的全部内容感谢您的阅读!相信大家都有一定的了解,希望分享的内容对大家有所帮助。如果您想了解更多知识,请关注行业资讯频道!

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > MySQL删除数据的三种方法是什么?

用户评论