Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
两个数据库之间的MySQL同步和主键冲突_Mysql_Merge_Primary Key_Sync_Navicat - Fatal编程技术网

两个数据库之间的MySQL同步和主键冲突

两个数据库之间的MySQL同步和主键冲突,mysql,merge,primary-key,sync,navicat,Mysql,Merge,Primary Key,Sync,Navicat,我对MySQL数据库的开发和生产环境有一个问题。我想合并这两个数据库,但由于内容作者一直在向生产环境中添加记录,因此有大约20个具有相同主键的重叠记录 我正在使用Navicat进行数据同步,但它只是用开发服务器上的记录更新生产服务器上的记录。主键没有任何意义,我想做的是给那些记录新的主键 这可以通过Navicat实现吗?如果不是,手动进入数据库并更改主键会是一个坏主意吗?或者这会影响MySQL的自动增值能力吗 谢谢。我无法回答Navicat的功能,但在MySQL中,您可以轻松设置自动增量值。如果

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

我正在使用Navicat进行数据同步,但它只是用开发服务器上的记录更新生产服务器上的记录。主键没有任何意义,我想做的是给那些记录新的主键

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


谢谢。

我无法回答Navicat的功能,但在MySQL中,您可以轻松设置自动增量值。如果是实时数据,我建议在事务中完成整个过程:

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;
注意-
altertable
语句需要一个常量,而不是使用变量