Par exemple, voici une table qui a une clé primaire mais qui n'est pas AUTO_INCREMENT
:
mysql> CREATE TABLE foo (
id INT NOT NULL,
PRIMARY KEY (id)
);
mysql> INSERT INTO foo VALUES (1), (2), (5);
Vous pouvez MODIFY
la colonne pour la redéfinir avec la AUTO_INCREMENT
option :
mysql> ALTER TABLE foo MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;
Vérifiez que cela a pris effet :
mysql> SHOW CREATE TABLE foo;
Sorties :
CREATE TABLE foo (
`id` INT(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1
Notez que vous avez modifié la définition de la colonne sur place, sans qu'il soit nécessaire de créer une deuxième colonne et de laisser tomber la colonne d'origine. Le site PRIMARY KEY
n'est pas affectée, et il n'est pas nécessaire de le mentionner dans la section ALTER TABLE
déclaration.
Ensuite, vous pouvez tester qu'une insertion génère une nouvelle valeur :
mysql> INSERT INTO foo () VALUES (); -- yes this is legal syntax
mysql> SELECT * FROM foo;
Sorties :
+----+
| id |
+----+
| 1 |
| 2 |
| 5 |
| 6 |
+----+
4 rows in set (0.00 sec)
J'ai testé ceci sur MySQL 5.0.51 sur Mac OS X.
J'ai également testé avec ENGINE=InnoDB
et une table dépendante. La modification de la id
La définition de la colonne n'interrompt pas l'intégrité référentielle.
Pour répondre à l'erreur 150 que vous avez mentionnée dans votre commentaire, il s'agit probablement d'un conflit avec les contraintes de clé étrangère. Mes excuses, après l'avoir testé, je pensais que cela fonctionnerait. Voici quelques liens qui peuvent aider à diagnostiquer le problème :