在这种情况下,我需要增加一个表的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 (并且是外键)的表执行相同的操作。
Update baseDataPerson p
SET p.baseDataID = p.baseDataID + 17623
WHERE p.baseDataID >= 4507081因此,这可能会导致第一个更新的进一步问题,但是它确实有更新级联,所以这可能意味着第一个查询中的id更新会继续进行吗?
关于为什么需要发生这种情况的额外信息--这个表基本上是一个位于影子数据库中的单独服务器上,我们在那里进行大量处理以检测数据更新,然后对活动数据库进行一次更新,以防止服务器崩溃。其中一个web做了一些事情,导致在活动服务器上的id有17623的缺口(除了来自影子数据库的更新之外,这个表不应该在活动服务器上更改),从而扰乱了系统。现在有客户记录引用id在活动服务器上的间隙之后,所以我必须将这个间隙放到阴影表中,以便再次对齐id。
发布于 2014-10-23 10:54:54
在您的ORDER BY中使用UPDATE子句以防止重复:
UPDATE baseData b
SET b.id = b.id + 17623
WHERE b.id >= 4507081
ORDER BY b.id DESC这样做可以确保旧值在新值被放入其位置之前被移开。ON UPDATE CASCADE将正确地更新所有外键。
https://stackoverflow.com/questions/26526345
复制相似问题