2011-08-22 6 views
4

J'ai un problème avec une base de données MySQL d'environnement de développement et de production. Je souhaite fusionner les deux bases de données, mais comme les auteurs de contenu ajoutent des enregistrements à l'environnement de production, il existe environ 20 enregistrements qui se chevauchent avec la même clé primaire. J'utilise Navicat pour la synchronisation de mes données, mais il ne fait que mettre à jour les enregistrements sur le serveur de production avec ceux de mon serveur de développement. Les clés primaires ne signifient rien, et ce que je voudrais faire, c'est donner à ces enregistrements de nouvelles clés primaires. Est-ce possible grâce à Navicat?Synchronisation MySQL entre 2 bases de données et clash de clé primaire

Si ce n'est pas le cas, serait-ce une mauvaise idée d'entrer manuellement dans la base de données et de modifier les clés primaires? Ou cela affecte-t-il la capacité d'auto-incrémentation de MySQL?

Merci.

Répondre

4

Je ne peux pas répondre à ce dont Navicat est capable, mais dans MySQL, vous pouvez facilement définir la valeur auto_increment. Je recommande de faire la chose dans une transaction si ses données en direct:

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; 

Remarque - la déclaration ALTER TABLE nécessite une constante au lieu de l'utilisation de variables.

Questions connexes