Insérez incrément automatique de la clé primaire de la table existante
Je suis en train de modifier une table qui n'a pas de clé primaire, ni la colonne de type auto_increment. Je sais comment ajouter une colonne de clé primaire, mais je me demandais si il est possible d'insérer des données dans la colonne de clé primaire automatiquement (j'ai déjà 500 lignes en DB et de vouloir leur donner des id mais je ne veux pas le faire manuellement). Toutes les pensées? Merci beaucoup.
- Vous pouvez facilement faire le
alter table
pour ajouter la clé, mais MySQL ne génère pas de codes pour les champs qui ne le sont pas déjà. Vous devrez mettre à jour manuellement les champs existants, puis assurez-vous que votre nouveau auto_increment commence à la droite de l'offset la valeur par défaut est " 1 " et que vous venais de finir avec une clé en double erreurs de toute façon. - Je viens de tester, et en fait, insérer l'id pour les lignes existantes et en commençant à 1
Vous devez vous connecter pour publier un commentaire.
Un
ALTER TABLE
déclaration de l'ajout de laPRIMARY KEY
colonne fonctionne correctement lors de mes tests:Sur une table temporaire créée à des fins de test, la déclaration ci-dessus a créé le
AUTO_INCREMENT
id
colonne et insérée à l'auto-incrémentation des valeurs pour chaque ligne de la table, en commençant par 1.FIRST
e.gALTER TABLE tbl1 ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST;
ALTER TABLE tbl ADD id INT(11) UNSIGNED PRIMARY KEY AUTO_INCREMENT FIRST;
LAST_INSERT_ID()
pour que la valeurSELECT * FROM table_name WHERE id = LAST_INSERT_ID()
et la plupart des langages de programmation des Api offre une fonction/méthode pour renvoyer la valeur dans le code de l'application.supposons que vous n'avez pas de colonne pour l'auto incrément comme id, non, alors vous pouvez les ajouter à l'aide de requête suivante:
Si vous avez une colonne, puis modifier à incrément automatique à l'aide de requête suivante:
FIRST
à la fin?id
colonne de la première à la table contrairement à la dernière, qui est le comportement par défaut.Pour ceux qui, comme moi, d'obtenir un
Multiple primary key defined
erreur, essayez:Sur MySQL v5.5.31 cette
id
colonne comme clé primaire pour moi et peuplées de chaque ligne avec une incrémentation de la valeur.oui, quelque chose comme ce serait le faire, peut-être pas le meilleur, vous pourriez voulez faire une sauvegarde
avis que le
any_field
vous sélectionnez doit être la même lors de la mise à jour.La méthode la plus simple et la plus rapide je trouve cette
J'ai été en mesure d'adapter ces instructions de prendre une table avec une existant non-incrément de la clé primaire, et d'ajouter une incrémentation de la clé primaire de la table et de créer une nouvelle clé primaire composite avec à la fois l'ancien et le nouveau touches comme une clé primaire composite en utilisant le code suivant:
Lorsque cela est fait, le _USER_ID domaine existe et qu'il a toutes les valeurs de la clé primaire exactement comme vous le souhaitez. Avec le "DROP TABLE" au sommet, vous pouvez l'exécuter à travers et à expérimenter avec des variations.
Ce que je n'ai pas été en mesure de faire le travail, c'est la situation où il y a des entrants Clés ÉTRANGÈRES qui point déjà à le USER_ID champ. Je reçois ce message quand j'essaie de faire un exemple plus complexe par la réception d'une clé étrangère d'une autre table.
Je suppose que j'ai besoin d'abattre toutes les clés étrangères avant de faire la commande ALTER table, puis de les reconstruire par la suite. Mais pour l'instant, je voulais partager cette solution à un niveau plus élevé, la version de la question d'origine dans le cas d'autres couru dans cette situation.
Exporter votre tableau, puis videz la table, puis ajouter un champ unique de type INT, et ensuite de le modifier pour AUTO_INCREMENT, puis importer votre table que vous avez exporté précédemment.
Vous pouvez ajouter une nouvelle colonne de la Clé Primaire d'une table existante, ce qui peut avoir des numéros de séquence, à l'aide de la commande:
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'ai été confrontée au même problème donc ce que j'ai fait j'ai abandonné le champ de la clé primaire, puis j'ai recréé et fait en sorte que c'est automatique incrémental . Ce qui a fonctionné pour moi . J'espère que cela aide d'autres
ALTER TABLE tableName MODIFIER tableNameID MEDIUMINT PAS NULL AUTO_INCREMENT;
Ici tableName est le nom de votre table,
tableName est votre nom de la colonne qui est primaire doit être modifié
MEDIUMINT est un type de données de votre clé primaire
AUTO_INCREMENT vous devez juste ajouter auto_increment après not null
Il fera ce primary key auto_increment......
Espère que c'est utile:)
Comment écrire du PHP pour MODIFIER l'existant champ (nom, dans cet exemple) pour en faire une clé primaire? W/o, bien sûr, ajouter des 'id' des champs à la table..
Cette table en cours de création - Nombre d'Enregistrements trouvés: 4 nom VARCHAR(20) OUI
race VARCHAR(30) OUI
couleur VARCHAR(20) OUI
poids SMALLINT(7) OUI
Ce résultat final recherché (DESCRIPTION de la TABLE) -
Nombre d'enregistrements trouvés: 4
nom VARCHAR(20) AUCUN PRI
race VARCHAR(30) OUI
couleur VARCHAR(20) OUI
poids SMALLINT(7) OUI
Au lieu d'obtenir ce -
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 de chevaux de course AJOUTER une id INT not NULL AUTO_INCREMENT d'ABORD, ADD PRIMARY KEY (id)";
comment l'obtenir? -
Nombre d'enregistrements trouvés: 4
nom VARCHAR(20) AUCUN PRI
race VARCHAR(30) OUI
couleur VARCHAR(20) OUI
poids SMALLINT(7) OUI
c'est à dire INSÉRER/AJOUTER.. etc. la clé primaire DANS la première zone d'enregistrement (w/o ajout d'un champ 'id', comme indiqué précédemment.