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 le AUTO_INCREMENT
choix :
mysql> ALTER TABLE foo MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;
Vérifiez que cela a bien 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 colonne en place, sans avoir besoin de créer une deuxième colonne et de supprimer la colonne d'origine. La PRIMARY KEY
la contrainte n'est pas affectée et vous n'avez pas besoin de la mentionner dans ALTER TABLE
déclaration.
Ensuite, vous pouvez tester qu'un insert 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 aussi testé avec ENGINE=InnoDB
et une table dépendante. Modification de l'id
la définition de 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é, j'ai pensé que cela fonctionnerait. Voici quelques liens qui peuvent vous aider à diagnostiquer le problème :
- Que signifie l'erreur mysql 1025 (HY000) :Erreur lors du changement de nom de './foo' (errorno :150) ?
- http://www.simplicidade.org/notes/ archives/2008/03/mysql_errno_150.html