2011-08-22 187 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語句需要恆定的,而不是使用的變量。