Я перехожу от одной системы к другой, и в процессе я буду одновременно запускать обе системы. Мне нужно иметь возможность синхронизировать однонаправленно из одной таблицы в другую, сохраняя основные ключи каждой таблицы.Как синхронизировать две таблицы MySQL, которые имеют разные структуры?
В этом примере у меня есть две таблицы (A) и (B). Мне нужно синхронизировать value1 и value2 (ниже) из таблицы B в таблицу A на основе общего внешнего ключа (match1 и match2 ниже). Таблица A будет иметь дополнительные поля, чем таблица B, и в B есть несколько полей, которые не будут синхронизированы.
Как я могу сделать следующее:
- вставки в значения, которые были добавлены к B
- Удалить из A записи, которые были удалены из B
- Update А с изменившейся поля от B
Вот некоторые демо-данные:
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);
Что вы предлагаете?
Что вы подразумеваете под «Сделать данные в A похожими на B»? Вы хотите, чтобы A содержал те же данные, что и B, только с дополнительными полями? – MBillock
Я согласен с MBillock. Просьба уточнить. – exhuma
Я отредактировал, чтобы уточнить, что я пытаюсь выполнить. Основная проблема заключается в том, чтобы сохранить первичные ключи в слиянии. – Dooltaz