РЕДАКТИРОВАТЬ: я думаю, что я неправильно понял ваше утверждение, что ключи уникальны для всех баз данных. В этом случае я бы просто не вставил строку из исходной базы данных, если она уже находится в целевой базе данных. Тогда вы все равно сможете копировать таблицы внешних ключей с теми же внешними ключами.
так в основном:
INSERT INTO MainTable (PK, field1, field2)
SELECT (PK, field1, field2)
FROM OldMainTable
WHERE PK NOT IN (SELECT PK FROM MainTable)
Оставив старый ответ ниже на всякий случай.
Лучше всего изменить таблицы так, чтобы в них было поле OldPrimaryKey. Затем, когда вы вставляете данные в целевую базу данных, сохраняйте исходный PK в поле OldPrimaryKey. Затем, когда вы вставляете что-либо с внешним ключом, ищите соответствие FK до поля OldPrimaryKey и обновляйте внешний ключ для соответствия. (Вероятно, хорошая идея создать копию внешнего ключа на всякий случай!)
ТАК что запросы могут выглядеть примерно так:
INSERT INTO MainTableTarget (OldPrimaryKey, field1, field2...)
SELECT PrimaryKey as OldPrimaryKey, field1, field2...
FROM OldMainTable
INSERT INTO Table2Target ( OldTable2PK, MainTableForeignKey, fielda, fieldb...)
SELECT Table2PK as OldTable2PK,
(SELECT PK FROM MainTableTarget) as MainTableForeignKey, --This get the FK to point at the newly created database record
fielda,
fieldb
FROM OldTable2
Возможно, это будет боль, но я не думаю, что здесь есть какие-то безболезненные варианты ...
О, и извините, если синтаксис немного нарушен ... Я парень по T-SQL, поэтому не знаю синтаксис MySQL. Надеюсь, вы поняли, хотя ...