2011-08-22 240 views
4

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

我为我的数据同步使用Navicat,但它只是更新生产服务器上的记录与我的开发服务器上的记录。主键不代表什么,我想要做的是给这些记录新的主键。

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

谢谢。

回答

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语句需要恒定的,而不是使用的变量。