Mysql 在存储在两个不同数据库中的两个表之间同步主键
我有两个MySQL数据库,其中包含两个表,我们称它们为表A和表B。这两个表都有as字段Mysql 在存储在两个不同数据库中的两个表之间同步主键,mysql,Mysql,我有两个MySQL数据库,其中包含两个表,我们称它们为表A和表B。这两个表都有as字段id和title。两个数据库都在同一台服务器上,同一用户可以访问这两个数据库 现在,表A是表B的子集,与标题字段有关。这意味着表A中的每个标题也存在于表B中。而id两个表的字段没有任何关联 我需要的是根据标题将表A中的id字段与表B中的id字段同步,即相同的title,相同的id。如果不清楚,我必须保存TABLE_Bid并覆盖TABLE_A。我不必将缺少的标题从表B添加到表A 有人建议使用一个临时表,在该表中复
id
和title
。两个数据库都在同一台服务器上,同一用户可以访问这两个数据库
现在,表A是表B的子集,与标题
字段有关。这意味着表A中的每个标题也存在于表B中。而id
两个表的字段没有任何关联
我需要的是根据标题将表A中的id
字段与表B中的id
字段同步,即相同的title
,相同的id
。如果不清楚,我必须保存TABLE_Bid
并覆盖TABLE_A。我不必将缺少的标题
从表B添加到表A
有人建议使用一个临时表,在该表中复制所有与表a相同的表B字段,然后将其重命名为表a。我不能这样做,因为表a实际上还有其他字段需要维护。所以,我不能完全扔掉旧桌子
此外,id
是这两个表的主键。这意味着我不能简单地从表_B复制到表_A,因为只要我尝试将一个id
更改为表_A中已经存在但链接到另一个标题的另一个,查询就会失败
我知道如何编写Perl或PHP脚本,但我想知道是否存在纯MySQL解决方案。您可以这样做
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;
很抱歉,我没有指定表_A还需要维护其他字段,与表_B不同。因此,我只需要更新id
字段。编辑问题以反映这一额外的困难。您的解决方案是完美的。我只需要做一些语法修改:ALTER->ALTER TABLE
,RENAME->RENAME TABLE
,并且在UPDATE命令中,我必须指定A.id\u new=B.id
,否则MySQL会抱怨id
在两个表上都有歧义。非常感谢。您可能希望考虑删除主键,应用更新,然后重新添加主键。