在MySQL中增加许多行的自动增量标识字段

时间:2014-10-23 10:41:53

标签: mysql

我遇到的情况是我需要增加id大于或等于4507081的表的id。可以说增量需要是17623。

所以基本上我要运行的sql是

UPDATE baseData b
SET b.id = b.id + 17623
WHERE b.id >= 4507081

但是我得到了:

ERROR 1062 (23000): Duplicate entry '4524704' for key 'PRIMARY'

我想它并没有意识到主键也会增加它的id。我该如何进行这种增量?

此外,我需要在同样使用此id(并且是外键)的表上执行相同的操作

Update baseDataPerson p
SET p.baseDataID = p.baseDataID + 17623
WHERE p.baseDataID >= 4507081

因此,这可能会导致第一次更新的进一步问题,但它确实有更新级联,所以也许这意味着第一个查询中的ID更新将继续进行?


关于为什么会发生这种情况的额外信息 - 基本上这个表是在影子数据库中的一个单独的服务器上,我们做了很多处理来检测数据更新,然后对实时数据库进行一次更新以停止直播服务器不堪重负。其中一个网络开发人员做了一些事情,导致了实时服务器上的id的17623间隙(除了来自影子数据库的更新之外,该表不应该在实时服务器上更改),因此搞砸了系统。现在有客户记录在实时服务器上的间隙之后引用id,所以我必须将间隙放入影子表中以再次对齐id。

1 个答案:

答案 0 :(得分:1)

使用ORDER BY中的UPDATE子句,以防止重复:

UPDATE baseData b
SET b.id = b.id + 17623
WHERE b.id >= 4507081
ORDER BY b.id DESC

按此顺序执行此操作可确保在将新值放入其位置之前将旧值移开。 ON UPDATE CASCADE将正确更新所有外键。