MySQL在2个数据库和主键冲突之间同步

时间:2011-08-22 17:15:00

标签: mysql merge primary-key sync navicat

我的开发和生产环境MySQL数据库存在问题。我想合并2个数据库,但由于内容作者一直在向生产环境添加记录,因此大约有20个重叠记录具有相同的主键。

我正在使用Navicat进行数据同步,但它只是使用我的开发服务器上的记录更新生产服务器上的记录。主键并不意味着什么,我想做的是给那些记录新的主键。

这可以通过Navicat吗?如果没有,手动进入数据库并更改主键是不是一个坏主意?或者这会影响MySQL的自动增量能力吗?

感谢。

1 个答案:

答案 0 :(得分:4)

我无法回答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语句需要常量而不是使用变量。