gpt4 book ai didi

mysql - 如何同步两个具有不同结构的 MySQL 表?

转载 作者:可可西里 更新时间:2023-11-01 07:04:00 25 4
gpt4 key购买 nike

我正在从一个系统迁移到另一个系统,在此过程中,我将同时运行两个系统。我需要能够从一个表单向同步到另一个表,同时维护每个表的主键。

在这个例子中,我有两个表 (A) 和 (B)。我需要根据公共(public)外键(下面的 match1 和 match2)将 value1 和 value2(下面)从表 B 同步到表 A。 A表会比B表多出一些字段,B表有一些字段不会同步。

我怎样才能做到以下几点:

  1. 将已添加到 B 的值插入到 A
  2. 从A中删除已从B中删除的记录
  3. 用 B 中更改的字段更新 A

这是一些演示数据:

DROP TABLE IF EXISTS `a`;
CREATE TABLE IF NOT EXISTS `a` (
`id1` int(10) unsigned NOT NULL,
`match1` int(10) unsigned NOT NULL,
`value1` varchar(255) NOT NULL,
PRIMARY KEY (`id1`)
);

INSERT INTO `a` (`id1`, `match1`, `value1`) VALUES
(1, 1, 'A'),
(2, 2, 'A'),
(3, 3, 'B'),
(4, 4, 'C'),
(5, 5, 'C');

DROP TABLE IF EXISTS `b`;
CREATE TABLE IF NOT EXISTS `b` (
`id2` int(10) unsigned NOT NULL,
`match2` int(10) unsigned NOT NULL,
`value2` varchar(255) NOT NULL,
PRIMARY KEY (`id2`)
);

INSERT INTO `b` (`id2`, `match2`, `value2`) VALUES
(1, 1, 'A'),
(2, 2, 'A'),
(3, 3, 'B'),
(4, 5, 'D'),
(5, 6, 'D'),
(6, 7, 'F');

我目前的方向是在两个表之间创建一个合并表,并相应地构建查询。例如:

create table ab as (select * from a, b);

你有什么建议?

最佳答案

1.将已添加到B的所有内容插入到A

INSERT INTO a(id1, match1, value1)
SELECT id2, match2, value2
FROM b WHERE NOT EXISTS (SELECT 1 FROM a WHERE a.match1 = b.match2)

2.从A中移除所有从​​B中移除的东西

DELETE FROM a
WHERE match1 IN (SELECT match1 FROM a INNER JOIN B ON A.match1 = B.match2)

3.用 B 中更改的字段更新 A

UPDATE a
SET value1 = (SELECT value2 FROM b WHERE a.match1 = b.match2)

关于mysql - 如何同步两个具有不同结构的 MySQL 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1499637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com