Insérer la clé primaire d’incrémentation automatique dans la table existante

J’essaie de modifier une table qui n’a pas de clé primaire ni de colonne auto_increment. Je sais comment append une colonne de clé primaire mais je me demandais s’il était possible d’insérer automatiquement des données dans la colonne de clé primaire (j’ai déjà 500 lignes dans la firebase database et je veux leur donner un identifiant mais je ne veux pas le faire manuellement) . Des pensées? Merci beaucoup.

Une instruction ALTER TABLE ajoutant la colonne PRIMARY KEY fonctionne correctement dans mes tests:

 ALTER TABLE tbl ADD id INT PRIMARY KEY AUTO_INCREMENT; 

Sur une table temporaire créée à des fins de test, l’instruction ci-dessus a créé la colonne d’ id AUTO_INCREMENT et les valeurs d’incrémentation automatique insérées pour chaque ligne existante de la table, en commençant par 1.

supposons que vous n’ayez pas de colonne pour l’incrémentation automatique comme id, non, alors vous pouvez append en utilisant la requête suivante:

 ALTER TABLE table_name ADD id int NOT NULL AUTO_INCREMENT primary key FIRST 

Si vous avez une colonne, modifiez-la en incrémentation automatique en utilisant la requête suivante:

  ALTER TABLE table_name MODIFY column_name datatype(length) AUTO_INCREMENT PRIMARY KEY 

oui, quelque chose comme ça le ferait, peut-être pas le meilleur si vous voulez faire une sauvegarde

 $get_query = mysql_query("SELECT `any_field` FROM `your_table`"); $auto_increment_id = 1; while($row = mysql_fetch_assoc($get_query)) { $update_query = mysql_query("UPDATE `your_table` SET `auto_increment_id`=$auto_increment_id WHERE `any_field` = '".$row['any_field']."'"); $auto_increment_id++; } 

notez que le any_field vous sélectionnez doit être le même lors de la mise à jour.

Pour ceux qui comme moi obtiennent une erreur Multiple primary key defined , essayez:

 ALTER TABLE `myTable` ADD COLUMN `id` INT AUTO_INCREMENT UNIQUE FIRST NOT NULL; 

Sur MySQL v5.5.31, définissez la colonne id comme clé primaire pour moi et remplissez chaque ligne avec une valeur incrémentée.

Le plus simple et le plus rapide que je trouve est celui-ci

 ALTER TABLE mydb.mytable ADD COLUMN mycolumnname INT NOT NULL AUTO_INCREMENT AFTER updated, ADD UNIQUE INDEX mycolumnname_UNIQUE (mycolumname ASC); 

J’ai pu adapter ces instructions à une table avec une clé primaire non incrémentée existante , append une clé primaire incrémentée à la table et créer une nouvelle clé primaire composite avec les anciennes et les nouvelles clés comme clé primaire composite à l’aide des éléments suivants code:

 DROP TABLE IF EXISTS SAKAI_USER_ID_MAP; CREATE TABLE SAKAI_USER_ID_MAP ( USER_ID VARCHAR (99) NOT NULL, EID VARCHAR (255) NOT NULL, PRIMARY KEY (USER_ID) ); INSERT INTO SAKAI_USER_ID_MAP VALUES ('admin', 'admin'); INSERT INTO SAKAI_USER_ID_MAP VALUES ('postmaster', 'postmaster'); ALTER TABLE SAKAI_USER_ID_MAP DROP PRIMARY KEY, ADD _USER_ID INT AUTO_INCREMENT NOT NULL FIRST, ADD PRIMARY KEY ( _USER_ID, USER_ID ); 

Lorsque cela est fait, le champ _USER_ID existe et contient toutes les valeurs numériques de la clé primaire exactement comme prévu. Avec le “DROP TABLE” en haut, vous pouvez l’exécuter encore et encore pour expérimenter des variations.

Ce que je n’ai pas pu faire, c’est la situation où des clés FOREIGN KEY entrantes pointent déjà vers le champ USER_ID. Je reçois ce message lorsque j’essaie de faire un exemple plus complexe avec une clé étrangère entrante provenant d’une autre table.

 #1025 - Error on rename of './zap/#sql-da07_6d' to './zap/SAKAI_USER_ID_MAP' (errno: 150) 

Je suppose que je dois supprimer toutes les clés étrangères avant de passer à la table ALTER, puis les reconstruire par la suite. Mais pour le moment, je voulais partager cette solution avec une version plus complexe de la question initiale au cas où d’autres personnes se trouveraient dans cette situation.

Exportez votre table, puis videz votre table, puis ajoutez le champ en tant qu’INT unique, puis changez-le en AUTO_INCREMENT, puis importez à nouveau votre table que vous avez précédemment exscope.

Vous pouvez append une nouvelle colonne de clé primaire à une table existante, qui peut avoir des numéros de séquence, en utilisant la commande:

 ALTER TABLE mydb.mytable ADD pk_columnName INT IDENTITY 

J’étais confronté au même problème, donc j’ai fait tomber le champ pour la clé primaire, puis je l’ai recréé et je me suis assuré qu’il s’agisse d’une incrémentation automatique. Cela a fonctionné pour moi. J’espère que ça aide les autres

ALTER TABLE tableName MODIFY tableNameID MEDIUMINT NON NULL AUTO_INCREMENT;

Comment écrire PHP pour ALTER le champ déjà existant (nom, dans cet exemple) pour en faire une clé primaire? W / o, bien sûr, en ajoutant des champs “id” supplémentaires à la table ..

Ceci est un tableau actuellement créé – Nombre de documents trouvés: 4 Nom VARCHAR (20) OUI Race VARCHAR (30) OUI Couleur VARCHAR (20) OUI Poids SMALLINT (7) OUI

Ceci un résultat recherché (TABLE DESCRIPTION) –

Nombre d’enregistrements trouvés: 4 nom VARCHAR (20) NON PRI race VARCHAR (30) OUI couleur VARCHAR (20) OUI poids SMALLINT (7) OUI

Au lieu de cela –

Nombre d’enregistrements trouvés: 5 id int (11) NO nom PRI VARCHAR (20) OUI race VARCHAR (30) OUI couleur VARCHAR (20) OUI poids SMALLINT (7) OUI

après avoir essayé ..

$ query = “ALTER TABLE chevaux de course ADD id INT NON NULL AUTO_INCREMENT, ADD PRIMARY KEY (id)”;

Comment obtenir ceci? –

Nombre d’enregistrements trouvés: 4 nom VARCHAR (20) NON PRI race VARCHAR (30) OUI couleur VARCHAR (20) OUI poids SMALLINT (7) OUI

c’est-à-dire INSERT / ADD .. etc., la clé primaire dans le premier enregistrement de champ (sans ajout d’un champ “id” supplémentaire, comme indiqué précédemment.