gpt4 book ai didi

mysql - MySQL中自增标识字段增加多行

转载 作者:行者123 更新时间:2023-11-29 12:37:41 25 4
gpt4 key购买 nike

我遇到的情况是,我需要增加表的 id,其中 id 大于或等于 4507081。假设增量需要为 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 更新将继续进行?

<小时/>

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

最佳答案

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

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

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

关于mysql - MySQL中自增标识字段增加多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26526345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com