使用自动增量ID在相同表之间复制行

时间:2011-01-31 11:21:57

标签: mysql

我有2个表具有相同的结构和自动增加的id,我正在尝试将行从一个复制到另一个。

当我尝试将一行从表A复制到表B并且唯一的id与表B中已存在的行冲突时,我想简单地将我正在复制的行的id设置为下一个值是自动增量计数器。

但事实证明这对我来说非常困难。这就是我所拥有的:

"INSERT INTO tableB SELECT * FROM tableA WHERE tableA.id = '$id'ON DUPLICATE KEY UPDATE tableB.id = LAST_INSERT_ID(tableB.id)"

但这似乎对我不起作用。另一件事是我需要确保如果密钥确实被更改,我需要能够告诉新密钥是什么,以便我可以对相关表中的行进行必要的更改,我也在复制。

有谁可以指出我做错了什么?

我意识到这里有一些类似的问题,我已经阅读了所有内容,但我似乎仍然无法理解这一点。

编辑背景信息:因为有人询问我的设置原因是什么(如果它不是最佳的话我也不会感到惊讶)。基本上我正在通过一堆字符串匹配将一些东西从另一个网站上删除到数据库中。然而,对于刮擦过程的挑剔本质,我不喜欢对最近刮下的数据进行实时查询。所以基本上我在cron时间表上搜索,经常检查数据的完整性,如果它看起来不错,我将它复制到运行查询的“实时”表中。

2 个答案:

答案 0 :(得分:1)

使用:

ON DUPLICATE KEY UPDATE tableB.id = tableB.id

然后应该将记录的id作为最后一个插入ID返回 - 即使它没有被'插入'并保持你的参考完整性提示顶部......

现在 - 你要做的事情对我来说似乎有点混乱(请随时解释一下 - 它可能会给你一个更好的答案)。

为什么需要将所有记录从a复制到b?这些表是“相同的”吗?

答案 1 :(得分:1)

确定根据您的更新,我只需使用一个表。

添加字段'已选中'默认值0 - 而不是复制您已确定的数据,只需将选中的字段更新为2.如果不可用则更新为1.

定期删除checked = 1的那些记录。

当好的时候更好地更新为1并删除不立即的那些。