您的位置:首页 > 热点专题

批量删除数据,常见的大坑!!!

时间:2020-03-09

当批量删除行数据时,InnoDB对自增标识的处理是一个潜在的大漏洞。

整个实验过程如上:

步骤1:创建一个表并设置一个自添加列;

步骤2:指定id=1插入,锚的第一行是id 1;

步骤3:不指定id,依靠自增机制,插入3行;

voice over:id应该更改为2,3,4吗?

步骤4:删除删除所有记录;

voiceover:这个坑很容易从这里出来。

步骤5:指定id=0插入;

步骤6:指定id=1插入;

步骤7:不指定id,依靠自增机制,插入1行;

请问,此时表中三行记录的身份证号码是多少?

它符合每个人的期望吗?

今天花一分钟时间讨论一下使用截断和删除成批删除数据的异同。

有三种常用的方法可以批量删除数据

drop table

当不需要该表时,可以使用这种方法。

truncate table

在保留表的同时删除所有数据,速度非常快。

voiceover:它可以理解为拖放表格,然后创建表格。

delete from table

可以删除所有数据并保留表,但是性能很差。

您也可以用where条件删除一些数据,这非常灵活。

虽然截断和删除可以删除所有数据并保留表,但它们之间有明显的区别。

1。

truncate是一个DDL语句,没有所谓的“事务回滚”;

delete是一个DML语句,执行后可以回滚。

2。

truncate table返回0;

delete from table返回删除的行数。

3。

InnoDB支持一个表和?桓鑫募耸?:

truncate将一次性终止该表,并且不会激活触发器,这非常快。

delete from table逐行删除,并以较慢的速度激活触发器。

voiceover:删除数据,记录日志,截断表不需要记录日志。

4。

当表中的一列被另一个表用作外键时:

truncate将失败;

delete将成功。

voiceover:删除此类数据失败很容易找到问题所在,因为错误通知简单易懂。

V.

当表中有自增列时:

truncate将恢复自增列计数;

删除所有数据后,自增计数不会从头开始。

voiceover:因此,在删除所有数据后,增加列数的行为本身通常不是用户想要的,因此这是一个潜在的陷阱。

此刻有什么事吗?

请根据您的业务场景选择删除数据的方法。

建筑师之路-分享技术理念

相关文章:

《缓冲池(buffer pool)》

《写缓冲(change buffer)》

《日志缓冲(log buffer)》

对于开始的实验,最后一个表格中三行记录的id号是多少?

voiceover:当文章告诉你原理时,你认为你能正确回答吗?

  • 友情链接:
  • 良庆农业网 版权所有© www.giltattoo.com 技术支持:良庆农业网| 网站地图