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删除数据的三种方式?》一文的全部内容感谢您的阅读!相信大家都有一定的了解,希望分享的内容对大家有所帮助。如果您想了解更多知识,请关注行业资讯频道!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > MySQL删除数据的三种方法是什么?