所以,在这之后,再插入新的数据行时,拿到的自增 id 就是 3。也就是说,出现了自增主键不连续的情况。 如下图 3 所示,即一个自增主键 id 不连续的复现步骤: 可以看到,这个操作序列复现了一个自增主键 id 不连续的现场 (没有 id=2 的行)。可见,唯一键冲突是导致自增主键 id 不连续的第一种原因。 同...
设置自增步长或偏移量:如果手动设置了自增步长(auto_increment_increment)或非零偏移量(auto_increment_offset),也可能导致自增ID不连续。 并发插入:在高并发场景下,不同的会话可能同时申请自增ID,由于InnoDB的自增锁机制,也可能导致ID分配不连续。 3. 解决MySQL自增ID不连续问题的方法或建议 忽略ID连续性:如果业...
3) 如果允许事务A把自增id回退,也就是把表t的当前自增值改回2,那么就会出现这样的情况:表里面已经有id=3的行, 而当前的自增id值是2. 4) 接下来,继续执行的其他事务就会申请到 id=2,然后再申请到 id=3.这时,就会出现插入语句报错"主键冲突". 而为了解决这个主键冲突,有两种方法: 1) 每次申请 id 之前...
1、虽然表定义了自增主键,但是插入时从全局ID生成器获取ID,导致每个表分配到的ID并不是连续的。 2、表中数据进行过删除。 3、session A插入了数据,获取了自增id为10,session B也插入了数据,但session A回滚了,导致id=10的空洞。 4、设置了innodb_autoinc_lock_mode=2,高并发或批量插入的情况下导致自增ID不...
重新排列自增ID:如果你的表中存在大量不连续的自增ID,可以考虑重新排列ID。这可以通过创建一个新的带有自增ID的表,将数据从旧表中导入新表,从而实现ID的重新排列。 使用UUID代替自增ID:UUID(Universally Unique Identifier)是一种能够保证全局唯一的标识符。你可以使用UUID作为主键,而不是自增ID,来避免自增ID不...
MySQL的自增ID不连续可能有以下几种原因: 删除记录:删除某些记录后,自增ID不会回退,而是继续递增。 插入失败:插入操作失败时,自增ID仍然会递增。 服务器重启:在某些情况下,服务器重启可能导致自增ID不连续。 设置自增步长:可以手动设置自增步长,导致ID不连续。 解决方法 删除记录后的处理: 可以使用TRUNCATE TABLE...
<1>、唯一键冲突是导致自增主键id不连续的第一种原因 <2>、事务回滚是导致自增主键id不连续的第二种原因 <3>、批量申请自增id的策略是导致自增主键id不连续的第三种原因 在这篇文章中提到了MySQL默认的innodb_autoinc_lock_mode=1,当innodb_autoinc_lock_mode=1和innodb_autoinc_lock_mode=2的情况下,自增...
在MySQL数据库中,自增长主键在数据删除后会导致ID不连续的问题。这一现象虽然不影响数据库的功能性,但可能影响系统的美观性和某些特定应用的需求。为解决此问题,可采用多种方法:一是通过备份和重置自增ID的方式;二是利用触发器自动调整ID;三是定期维护表结构,确保ID的连续性。每种方法各有优劣,需根据具体应用场景...