web-dev-qa-db-fra.com

Problèmes liés à l'ajout d'un nouvel ID (incrémentation automatique) après l'existence d'une table

J'ai une table avec 38.000 enregistrements, mais sans colonne d'incrémentation automatique telle que ID.
Maintenant, je dois ajouter une colonne ID et je me demande s’il pourrait y avoir des problèmes?

16
Bobo

Vous pouvez ajouter que faire sans problème seulement si votre table n’a pas de relation avec les autres .

Vous devez supprimer l'ancienne clé primaire et télécharger la table en conséquence (éventuellement, ajouter un index unique sur l'ancienne clé primaire).

Procédez comme ça:

  • Faites un dump de votre base de données

  • Supprimer la clé primaire comme ça

ALTER TABLE XXX DROP PRIMARY KEY
  • Ajouter la nouvelle colonne comme ça
ALTER TABLE XXX add column Id INT NOT NULL AUTO_INCREMENT FIRST, ADD primary KEY Id(Id)

Le tableau sera examiné et l'AutoInc mis à jour.

34
A.Baudouin

Ceci ajoutera un identifiant d'incrémentation automatique à votre table MySQL:

ALTER TABLE  `your_table_name` ADD  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

En fonction de la quantité de données sur votre table, cela peut prendre quelques minutes.

21
GoingDrupal

Voici la solution que j'ai essayée avec MySQL Workbench: 

ALTER TABLE `tableName` CHANGE COLUMN `id` `id` INT(11) NOT NULL AUTO_INCREMENT  ;

Je ne sais pas si c'est correct, mais je n'ai encore remarqué aucun problème dans mon application Java EE. 

7
yurislav

Je travaille avec de très grandes données et j'avais une colonne id remplie avec NULLS. J'ai choisi d'exécuter le code SQL suivant pour remplir avec des chiffres ... puis j'ai défini la colonne id comme clé primaire.

set @row = 0;
UPDATE philadelphia.msg_geo_sal SET id = @row := @row + 1;
1
Selah

"pourrait-il y avoir des problèmes?"

Il pourrait y avoir des problèmes simplement en insérant un enregistrement. Toutefois...

Généralement, l'ajout d'un nouveau champ est généralement assez sûr, que ce soit une colonne à incrémentation automatique ou non. Il modifie ou supprime les colonnes qui risquent le plus de vous causer des problèmes si vous n'êtes pas sûr de toutes les dépendances.

Pour être sûr, cependant, j'essayais d'abord sur une copie (testée) de version et je lançais d'abord votre/vos application (s) avec la version testée, juste pour être sûr. C'est une bonne pratique d'utiliser un environnement de test, de toute façon.

Pouvez-vous être plus précis sur les types de problèmes qui vous inquiètent?

0
David

Vous devrez peut-être l'ajouter en tant que clé primaire avant de pouvoir le définir en tant que champ d'augmentation automatique.

Vous pouvez regarder cet exemple

ALTER TABLE `category`
ADD PRIMARY KEY (`cat_id`);
ALTER TABLE `category`
MODIFY `cat_id` int(11) NOT NULL AUTO_INCREMENT;
0
Phuc