212 votes

Mysql - Modifier une colonne pour qu'elle soit AUTO_INCREMENT

J'essaie de modifier une table pour que sa colonne de clé primaire AUTO_INCREMENT après coup. J'ai essayé le sql suivant, mais j'ai obtenu une erreur de syntaxe :

ALTER TABLE document
ALTER COLUMN document_id AUTO_INCREMENT

Est-ce que je fais quelque chose de mal ou est-ce que ce n'est pas possible ?

+--------------------+
| VERSION()          |
+--------------------+
| 5.0.75-0ubuntu10.2 |
+--------------------+

410voto

roman Points 6049
ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

3 votes

Je suis curieux de savoir pourquoi vous suggérez INT(4). Une raison particulière ?

3 votes

@Steven Oxley parce que j'ai déclaré ma table de cette façon.

30 votes

En spécifiant un nombre entre parenthèses, vous faites exactement ce qui suit rien (bon ok, presque rien) pour les types d'entiers MySQL. La seule chose qui peut être influencée par le nombre est la largeur d'affichage, et c'est au client de le faire. Mais ne vous laissez pas tromper en pensant que cela fonctionne comme pour les types VARCHAR et DECIMAL - dans ces cas, la quantité de données que vous pouvez stocker est en fait spécifiée, alors qu'un type particulier d'INT permet toujours de stocker exactement la même gamme de valeurs.

82voto

Roland Bouman Points 15226

Roman a raison, mais notez que la colonne auto_increment doit faire partie de la PRIMARY KEY ou d'une UNIQUE KEY (et dans presque 100% des cas, elle devrait être la seule colonne qui compose la PRIMARY KEY) :

ALTER TABLE document MODIFY document_id INT AUTO_INCREMENT PRIMARY KEY

12 votes

+1. Clé primaire requise si elle n'est pas définie au moment de la création de la table.

1 votes

Cela signifie également que les données de cette colonne doivent être déjà uniques.

8voto

Steven Oxley Points 2682

Le SQL pour le faire serait :

ALTER TABLE `document` MODIFY COLUMN `document_id` INT AUTO_INCREMENT;

Il y a plusieurs raisons pour lesquelles votre SQL peut ne pas fonctionner. Premièrement, vous devez re-spécifier le type de données ( INT dans ce cas). De plus, la colonne que vous essayez de modifier doit être indexée (il n'est pas nécessaire qu'elle soit la clé primaire, mais c'est généralement ce que vous souhaitez). En outre, il ne peut y avoir qu'une seule AUTO_INCREMENT pour chaque table. Ainsi, vous pouvez exécuter le SQL suivant (si votre colonne n'est pas indexée) :

ALTER TABLE `document` MODIFY `document_id` INT AUTO_INCREMENT PRIMARY KEY;

Vous pouvez trouver plus d'informations dans la documentation MySQL : http://dev.mysql.com/doc/refman/5.1/en/alter-table.html pour la syntaxe de la colonne de modification et http://dev.mysql.com/doc/refman/5.1/en/create-table.html pour plus d'informations sur la spécification des colonnes.

7voto

Håvard S Points 11152

Vous devez spécifier le type de la colonne avant la directive auto_increment, c'est à dire ALTER TABLE document ALTER COLUMN document_id INT AUTO_INCREMENT .

1 votes

Il devrait être MODIFY COLUMN

7voto

Dan Soap Points 6013

AUTO_INCREMENT fait partie du type de données de la colonne, vous devez redéfinir le type de données complet de la colonne :

ALTER TABLE document
ALTER COLUMN document_id int AUTO_INCREMENT

( int à titre d'exemple, vous devriez le définir sur le type que la colonne avait auparavant)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X