Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在存储在两个不同数据库中的两个表之间同步主键_Mysql - Fatal编程技术网

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

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 有人建议使用一个临时表,在该表中复

我有两个MySQL数据库,其中包含两个表,我们称它们为表A和表B。这两个表都有as字段
id
title
。两个数据库都在同一台服务器上,同一用户可以访问这两个数据库

现在,表A是表B的子集,与
标题
字段有关。这意味着表A中的每个
标题
也存在于表B中。而
id
两个表的字段没有任何关联

我需要的是根据标题将表A中的
id
字段与表B中的
id
字段同步,即相同的
title
,相同的
id
。如果不清楚,我必须保存TABLE_B
id
并覆盖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
在两个表上都有歧义。非常感谢。您可能希望考虑删除主键,应用更新,然后重新添加主键。