2011-08-22 2 views
4

개발 및 프로덕션 환경 MySQL 데이터베이스에 문제가 있습니다. 2 개의 데이터베이스를 병합하고 싶지만 콘텐츠 작성자가 프로덕션 환경에 레코드를 추가 했으므로 동일한 기본 키가있는 약 20 개의 중복 레코드가 있습니다.2 데이터베이스와 기본 키 충돌 사이의 MySQL 동기화

데이터 동기화를 위해 Navicat을 사용하고 있지만 프로덕션 서버의 레코드를 내 개발 서버의 레코드로 업데이트합니다. 기본 키는 아무 의미도 없으며, 내가 원하는 것은 레코드에 새로운 기본 키를 부여하는 것입니다.

Navicat을 통해 가능합니까? 그렇지 않다면 수동으로 DB에 들어가서 기본 키를 변경하는 것이 좋지 않겠습니까? 또는 이것은 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 문은 상수가 아닌 변수의 사용을 필요로한다.