Синхронизация MySQL между 2 базами данных и конфликтом первичных ключей - PullRequest
4 голосов
/ 22 августа 2011

У меня проблема с базой данных MySQL для среды разработки и производства.Я хочу объединить две базы данных, но поскольку авторы контента добавляют записи в производственную среду, существует около 20 перекрывающихся записей с одним и тем же первичным ключом.

Я использую Navicat для синхронизации данных, нопросто обновляет записи на производственном сервере с записями с моего сервера разработки.Первичные ключи ничего не значат, и я хотел бы дать этим записям новые первичные ключи.

Возможно ли это через Navicat?Если нет, было бы плохой идеей вручную войти в базу данных и изменить первичные ключи?Или это влияет на способность MySQL к автоинкременту?

Спасибо.

1 Ответ

4 голосов
/ 22 августа 2011

Я не могу ответить за то, на что способен Navicat, но в MySQL вы можете легко установить значение auto_increment. Я рекомендую делать все это в транзакции, если это живые данные:

START TRANSACTION;
SELECT max(id)+1 INTO @new_id FROM mytable;
SET @range_start = [first ID you'd like to change];
SET @range_end = [last ID you'd like to change];
SET @offset = @new_id - @range_start;
UPDATE mytable SET id = id + @offset WHERE id BETWEEN @range_start AND @range_end;
SELECT @range_end + @offset + 1;
ALTER TABLE mytable AUTO_INCREMENT=[value returned by above statement];
COMMIT;

Примечание - для оператора ALTER TABLE требуется использование константы вместо использования переменных.

...