Hier is bijvoorbeeld een tabel die een primaire sleutel heeft maar niet AUTO_INCREMENT
is :
mysql> CREATE TABLE foo (
id INT NOT NULL,
PRIMARY KEY (id)
);
mysql> INSERT INTO foo VALUES (1), (2), (5);
U kunt MODIFY
de kolom om deze opnieuw te definiëren met de AUTO_INCREMENT
optie:
mysql> ALTER TABLE foo MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;
Controleer of dit van kracht is:
mysql> SHOW CREATE TABLE foo;
Uitgangen:
CREATE TABLE foo (
`id` INT(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1
Houd er rekening mee dat u de kolomdefinitie op zijn plaats hebt gewijzigd, zonder dat u een tweede kolom hoeft te maken en de oorspronkelijke kolom laat vallen. De PRIMARY KEY
beperking wordt niet beïnvloed en u hoeft het niet te vermelden in de ALTER TABLE
verklaring.
Vervolgens kunt u testen of een insert een nieuwe waarde genereert:
mysql> INSERT INTO foo () VALUES (); -- yes this is legal syntax
mysql> SELECT * FROM foo;
Uitgangen:
+----+
| id |
+----+
| 1 |
| 2 |
| 5 |
| 6 |
+----+
4 rows in set (0.00 sec)
Ik heb dit getest op MySQL 5.0.51 op Mac OS X.
Ik heb ook getest met ENGINE=InnoDB
en een afhankelijke tabel. De id
wijzigen kolomdefinitie onderbreekt de referentiële integriteit niet.
Om te reageren op de fout 150 die u in uw opmerking noemde, is het waarschijnlijk een conflict met de externe sleutelbeperkingen. Mijn excuses, nadat ik het had getest, dacht ik dat het zou werken. Hier zijn een paar links die kunnen helpen bij het diagnosticeren van het probleem:
- Wat betekent mysql-fout 1025 (HY000):Fout bij hernoemen van './foo' (errorno:150)?
- http://www.simplicidade.org/notes/ archives/2008/03/mysql_errno_150.html