首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySQL中增加自动增量标识字段的多行

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

Stack Overflow用户
提问于 2014-10-23 10:41:52
回答 1查看 33关注 0票数 0

在这种情况下,我需要增加一个表的id,其中id大于或等于4507081。假设增量需要17623。

所以基本上,我想运行的sql是

代码语言:javascript
复制
UPDATE baseData b
SET b.id = b.id + 17623
WHERE b.id >= 4507081

不过,我明白了:

代码语言:javascript
复制
ERROR 1062 (23000): Duplicate entry '4524704' for key 'PRIMARY'

我想它没有意识到主键也会增加。我需要如何做这个增量呢?

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

代码语言:javascript
复制
Update baseDataPerson p
SET p.baseDataID = p.baseDataID + 17623
WHERE p.baseDataID >= 4507081

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

关于为什么需要发生这种情况的额外信息--这个表基本上是一个位于影子数据库中的单独服务器上,我们在那里进行大量处理以检测数据更新,然后对活动数据库进行一次更新,以防止服务器崩溃。其中一个web做了一些事情,导致在活动服务器上的id有17623的缺口(除了来自影子数据库的更新之外,这个表不应该在活动服务器上更改),从而扰乱了系统。现在有客户记录引用id在活动服务器上的间隙之后,所以我必须将这个间隙放到阴影表中,以便再次对齐id。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-23 10:54:54

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

代码语言:javascript
复制
UPDATE baseData b
SET b.id = b.id + 17623
WHERE b.id >= 4507081
ORDER BY b.id DESC

这样做可以确保旧值在新值被放入其位置之前被移开。ON UPDATE CASCADE将正确地更新所有外键。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26526345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档