Как объединить две базы данных в MySql - PullRequest
1 голос
/ 16 сентября 2011

Мне нужно объединить две базы данных MySql.

  • DBtwo является копией DBone.
  • Я добавил данные в table_x в DBone и добавил данные в table_y в DBtwo.
  • Мне нужно сохранить данные, добавленные в DBOne, при объединении всех остальных правок, например, удаленных записей, сделанных в DBTwo.
  • Тогда схемы идентичны, в то время как каждая БД имеет разные данные из разных таблиц.

Спасибо всем за помощь.

Edit: Я забыл. Я добавил столбцы в table_x, которые являются внешними ключами для table_y. Таким образом, в DBone есть некоторые записи, которые были вставлены без столбцов, которые я добавил в table_x в DBtwo. : /

Ответы [ 2 ]

0 голосов
/ 16 сентября 2011

Есть ли у вас копия исходной базы данных до слияния? Если нет, то, что вы спрашиваете, невозможно. Вот проблема:

Исходная база данных имеет следующие записи:

{a, b, c}

В table_x вы добавляете d, так что теперь у вас есть:

{a, b, c, d}

В таблице y вы удалите b, поэтому у вас есть:

{a, c}

Теперь вы пытаетесь объединить эти два набора данных:

{a, b, c, d}
{a, c}

Без ссылки на оригинал, откуда вы знаете, должны ли b и d быть в новом наборе. Если они не были в оригинале, и вы добавили их после разветвления, они должны быть включены. Если они были в оригинале и вы удалили их в table_y после слияния, они не должны быть включены.

Предполагая, что у вас есть доступ, вы захотите сделать что-то вроде:

insert into table_y
select *
from table_x x
where x.id not in (select id from table_x_original)

А затем переименуйте table_y в table_x (если вы хотите, чтобы table_x был новым источником данных). Если ваши идентификаторы сгенерированы и у вас могут возникнуть конфликты, вам нужно заменить * на список всех столбцов, кроме столбца id, чтобы сгенерировать новый последовательный идентификатор.

0 голосов
/ 16 сентября 2011

Вы можете использовать триггер. Пожалуйста, ознакомьтесь с документацией MySQL для вашей реализации, касающейся триггеров, функций и процедур.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...