Par exemple, voici une table qui a une clé primaire mais 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 de redéfinir avec l'option AUTO_INCREMENT
:
mysql> ALTER TABLE foo MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;
Vérifier ce qui 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 en place, sans nécessiter la création d'une deuxième colonne et laissant tomber la colonne d'origine. La contrainte PRIMARY KEY
n'est pas affectée et vous n'avez pas besoin de l'indiquer dans l'instruction ALTER TABLE
.
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)
Je l'ai testé ceci sur MySQL 5.0.51 sous Mac OS X.
I également testé avec ENGINE=InnoDB
et une table dépendante. La modification de la définition de colonne id
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 ça marcherait. Voici quelques liens qui peuvent aider à diagnostiquer le problème:
Wow, très bien, merci beaucoup. Cela a fonctionné sans accroc sur l'une de mes tables. Mais une deuxième table, je reçois cette erreur ... Erreur lors du renommage de '. \ DBNAME \ # sql-6c8_62259c' en '. \ DBNAME \ dealer_master_events' (code d'erreur: 150) –
merci aloat. tu m'as sauvé. merci –
si la clé primaire agit déjà comme une clé étrangère ailleurs, vous devrez désactiver les contrôles de clé étrangère avant d'exécuter la requête alter table. 'set foreign_key_checks = 0; ALTER TABLE acheteur MODIFY COLUMN _id INT NON NULL AUTO_INCREMENT; set foreign_key_checks = 1; ' –