在两个不同数据库中存储的两个表之间同步主键

时间:2012-09-21 19:40:13

标签: mysql

我有两个包含两个表的MySQL数据库,让我们称它们为TABLE_A和TABLE_B。这两个表都包含字段idtitle。两个数据库都在同一台服务器上,同一个用户可以访问这两个数据库。

现在,TABLE_A是TABLE_B的子集,用于关注title字段。这意味着TABLE_B中的每个title也存在于TABLE_B中。虽然这两个表的id字段没有任何关联。

我需要的是根据标题将TABLE_A中的id字段与TABLE_B中的id字段同步,即相同title,同一id。如果不清楚,我必须保存TABLE_B id并覆盖TABLE_A。而且我不必将TABLE_B中缺少的title添加到TABLE_A。

有人建议使用时态表来复制与TABLE_A共同的所有TABLE_B字段,然后将其重命名为TABLE_A。我不能这样做,因为TABLE_A实际上还有我需要维护的其他字段。所以,我不能完全放弃旧的TABLE_A。

此外,id是两个表的主键。这意味着我不能简单地从TABLE_B复制到TABLE_A,因为一旦我尝试将一个id更改为另一个已存在于TABLE_A中但链接到另一个title的查询将失败。 / p>

我知道如何编写Perl或PHP脚本来完成它,但我想知道是否存在纯MySQL解决方案。

1 个答案:

答案 0 :(得分:3)

你可以这样做

CREATE TABLE TableA_TMP AS
SELECT * FROM TableA;

ALTER TABLE TableA_TMP ADD id_new int;

UPDATE TableA_TMP A INNER JOIN TableB B ON lower(A.title) = lower(B.title)
SET id_new = B.id;

RENAME TABLE TableA TO TableA_backup;    

CREATE TableA AS
select id_new as id, title,.... from TableA_TMP;