J'essaie de modifier une table qui n'a ni clé primaire ni colonne auto_increment. Je sais comment ajouter une colonne de clé primaire mais je me demandais s'il est possible d'insérer automatiquement des données dans la colonne de clé primaire (j'ai déjà 500 lignes dans DB et je veux leur donner un identifiant mais je ne veux pas le faire manuellement) . Des pensées? Merci beaucoup.
mysql
primary-key
FlyingCat
la source
la source
alter table
pour ajouter la clé, mais MySQL ne générera pas d'ID pour les champs qui ne les ont pas déjà. Vous devrez mettre à jour manuellement les champs existants, puis vous assurer que votre nouvel auto_increment commence au bon décalage - il vaut par défaut '1' et vous vous retrouverez de toute façon avec des erreurs de clé en double.Réponses:
Une
ALTER TABLE
instruction ajoutant laPRIMARY KEY
colonne fonctionne correctement dans mes tests:Sur une table temporaire créée à des fins de test, l'instruction ci-dessus a créé la
AUTO_INCREMENT
id
colonne et inséré des valeurs d'incrémentation automatique pour chaque ligne existante de la table, en commençant par 1.la source
FIRST
par exempleALTER TABLE tbl1 ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST;
LAST_INSERT_ID()
cette valeurSELECT * FROM table_name WHERE id = LAST_INSERT_ID()
et la plupart des API de langage de programmation offrent une fonction / méthode pour renvoyer cette valeur dans le code de l'application.supposons que vous n'ayez pas de colonne pour l'incrémentation automatique comme id, non, alors vous pouvez ajouter en utilisant la requête suivante:
Si vous avez une colonne, passez à l'incrémentation automatique à l'aide de la requête suivante:
la source
FIRST
à la fin?id
colonne la première du tableau par opposition à la dernière, ce qui est le comportement par défaut.oui, quelque chose comme ça le ferait, ce n'est peut-être pas le meilleur, vous voudrez peut-être faire une sauvegarde
notez que le que
any_field
vous sélectionnez doit être le même lors de la mise à jour.la source
Pour ceux comme moi qui obtiennent une
Multiple primary key defined
erreur, essayez:Sur MySQL v5.5.31, cela définissait la
id
colonne comme clé primaire pour moi et remplissait chaque ligne avec une valeur incrémentielle.la source
Le plus simple et le plus rapide que je trouve est celui-ci
la source
J'ai pu adapter ces instructions à une table avec une clé primaire non incrémentielle existante , et ajouter une clé primaire incrémentielle à la table et créer une nouvelle clé primaire composite avec les anciennes et les nouvelles clés en tant que clé primaire composite en utilisant ce qui suit code:
Lorsque cela est fait, le champ _USER_ID existe et contient toutes les valeurs numériques de la clé primaire exactement comme vous le souhaitez. 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 obtenir, c'est la situation où il y a des clés étrangères entrantes qui pointent déjà vers le champ USER_ID. Je reçois ce message lorsque j'essaye de faire un exemple plus complexe avec une clé étrangère entrante d'une autre table.
Je suppose que je dois détruire toutes les clés étrangères avant de faire la table ALTER, puis les reconstruire par la suite. Mais pour l'instant, je voulais partager cette solution à une version plus difficile de la question originale au cas où d'autres se retrouveraient dans cette situation.
la source
Exportez votre table, puis videz votre table, puis ajoutez un champ comme INT unique, puis changez-le en AUTO_INCREMENT, puis importez à nouveau votre table que vous avez exportée précédemment.
la source
Vous pouvez ajouter une nouvelle colonne de clé primaire à une table existante, qui peut avoir des numéros de séquence, à l'aide de la commande:
la source
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTITY' at line 1
J'étais confronté au même problème, alors ce que j'ai fait, j'ai laissé tomber le champ de la clé primaire, puis je l'ai recréé et je me suis assuré qu'il était auto incrémentiel. Cela a fonctionné pour moi. J'espère que ça aide les autres
la source
ALTER TABLE tableName MODIFY tableNameID MEDIUMINT NON NULL AUTO_INCREMENT ;
Ici tableName est le nom de votre table,
tableName est le nom de votre colonne qui doit être modifié
MEDIUMINT est un type de données de votre clé primaire existante
AUTO_INCREMENT vous devez ajouter juste auto_increment après non null
Cela rendra cette clé primaire auto_increment ......
J'espère que cela vous sera utile :)
la source
Comment écrire PHP pour ALTER le champ déjà existant (nom, dans cet exemple) pour en faire une clé primaire? Sans, bien sûr, ajouter des champs "id" supplémentaires à la table.
Ceci est une table actuellement créée - Nombre d'enregistrements trouvés: 4 nom VARCHAR (20) YES race VARCHAR (30) OUI couleur VARCHAR (20) OUI poids SMALLINT (7) OUI
Ceci est un résultat final recherché (DESCRIPTION DU TABLEAU) -
Nombre d'enregistrements trouvés: 4 nom VARCHAR (20) NO PRI race VARCHAR (30) OUI couleur VARCHAR (20) OUI poids SMALLINT (7) OUI
Au lieu de l'obtenir -
Nombre d'enregistrements trouvés: 5 id int (11) NON PRI nom VARCHAR (20) OUI race VARCHAR (30) OUI couleur VARCHAR (20) OUI poids SMALLINT (7) OUI
après avoir essayé ...
$ query = "ALTER TABLE racehorses ADD id INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id)";
Comment obtenir ceci? -
Nombre d'enregistrements trouvés: 4 nom VARCHAR (20) NO 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 ajouter un champ «id» supplémentaire, comme indiqué précédemment.
la source