Modifier une colonne MySQL pour qu'elle soit AUTO_INCREMENT


194

J'essaie de modifier une table pour faire sa colonne de clé primaire AUTO_INCREMENTaprès le fait. J'ai essayé le SQL suivant, mais j'ai reçu une notification d'erreur de syntaxe.

ALTER TABLE document
ALTER COLUMN document_id AUTO_INCREMENT

Suis-je en train de faire quelque chose de mal ou n'est-ce pas possible?

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

Réponses:


379
ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

3
Je suis curieux de savoir pourquoi vous suggéreriez INT (4). N'importe quelle raison?
Steven Oxley

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

30
Spécifier un nombre entre parenthèses ne fait exactement rien (enfin ok, presque rien) pour les types 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 y trompez pas et pensez qu'il fonctionne comme il le fait pour les types VARCHAR et DECIMAL - dans ces cas, la quantité de données que vous pouvez y stocker est en fait spécifiée, tandis qu'une saveur particulière d'INT permet toujours le stockage de l'exact même plage de valeurs
Roland Bouman

J'obtiens toujours une erreur de clé primaire lors de ces opérations, j'ai donc ce que je fais: SET FOREIGN_KEY_CHECKS = 0; ALTER TABLE document DROP PRIMARY KEY; ALTER TABLE document MODIFY COLUMN document_id INT PRIMARY KEY AUTO_INCREMENT NOT NULL; SET FOREIGN_KEY_CHECKS = 1;
Fernando

Cela ne semble pas fonctionner dans MySQL, car vous devez définir la colonne comme clé primaire, car une seule colonne peut être auto_increment (voir également la réponse de Roland Bouman ci
charlchad

74

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, ce devrait être la seule colonne qui compose la PRIMARY KEY):

ALTER TABLE document MODIFY document_id INT AUTO_INCREMENT PRIMARY KEY

10
+1. Clé primaire requise si non définie au moment de la création de la table.

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

10

Dans mon cas, cela n'a fonctionné que lorsque je l'ai mis not null. Je pense que c'est une contrainte.

ALTER TABLE document MODIFY COLUMN document_id INT NOT NULL AUTO_INCREMENT;

7

Le SQL pour ce 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. Vous devez d'abord spécifier à nouveau le type de données ( INTdans ce cas). De plus, la colonne que vous essayez de modifier doit être indexée (il n'est pas nécessaire que ce soit la clé primaire, mais c'est généralement ce que vous souhaitez). De plus, il ne peut y avoir qu'une seule AUTO_INCREMENTcolonne pour chaque table. Ainsi, vous souhaiterez peut-être 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.


6

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


1
Cela devrait êtreMODIFY COLUMN
shxfee le

5

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

ALTER TABLE document
ALTER COLUMN document_id int AUTO_INCREMENT

( intpris comme exemple, vous devez le définir sur le type que la colonne avait avant)


3

Vous pouvez le faire comme ceci:

 alter table [table_name] modify column [column_name] [column_type] AUTO_INCREMENT;

Cela semble être juste une répétition de toutes les autres réponses.
Pang

2

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

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT

(int pris comme exemple, vous devez le définir sur le type que la colonne avait avant)


2

Vous pouvez utiliser la requête suivante pour que document_id s'incrémente automatiquement

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

Il est préférable de créer également la clé primaire document_id

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment PRIMARY KEY;

1
Notez que si cette colonne est déjà une clé primaire, vous ne pouvez pas la déclarer à nouveau là-bas, cela donne une erreur sur plusieurs clés primaires (vous vous attendez à ce qu'elle soit un peu plus intelligente là-bas et voyez que c'est la même clé primaire, je suppose) . Donc, dans ce cas, vous sautez simplement la clé primaire et cela n'affecte pas le paramètre de clé primaire existant sur cette colonne
George Birbilis

2

La déclaration ci-dessous fonctionne. Notez que vous devez mentionner à nouveau le type de données pour le nom de la colonne (redéclarez le type de données que la colonne était avant).

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT;

2

Si aucun des travaux ci-dessus ne fonctionne, essayez ceci. C'est ce que j'ai fait dans MYSQL et oui, vous devez écrire le nom de la colonne (document_id) deux fois.

ALTER TABLE document
CHANGE COLUMN document_id document_id INT(11) NOT NULL AUTO_INCREMENT ;

1

Pour modifier la colonne dans mysql, nous utilisons des mots-clés alter et modify. Supposons que nous ayons créé une table comme:

create table emp(
    id varchar(20),
    ename varchar(20),
    salary float
);

Maintenant, nous voulons modifier le type de l'id de la colonne en entier avec incrémentation automatique. Vous pouvez le faire avec une commande comme:

alter table emp modify column id int(10) auto_increment;

1

Syntaxe de table précédente:

CREATE TABLE apim_log_request (TransactionId varchar(50) DEFAULT NULL);

Pour changer le TransactionId en incrémentation automatique, utilisez cette requête

ALTER TABLE apim_log_request MODIFY COLUMN TransactionId INT auto_increment;


1

Juste comme ça:

alter table document modify column id int(11) auto_increment;


0

Lorsque vous redéfinissez à nouveau la colonne, vous devez à nouveau spécifier le type de données et y ajouter auto_increment car il fait partie du type de données.

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

0

Définition de la colonne comme clé primaire et incrémentation automatique en même temps:

  mysql> ALTER TABLE persons MODIFY COLUMN personID INT auto_increment PRIMARY KEY;
    Query OK, 10 rows affected (0.77 sec)
    Records: 10  Duplicates: 0  Warnings: 0

    mysql>


-3

Utilisez les requêtes suivantes:

ALTER TABLE YourTable DROP COLUMN IDCol

ALTER TABLE YourTable ADD IDCol INT IDENTITY(1,1)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.