For eksempel, her er en tabel, der har en primær nøgle, men ikke er AUTO_INCREMENT
:
mysql> CREATE TABLE foo (
id INT NOT NULL,
PRIMARY KEY (id)
);
mysql> INSERT INTO foo VALUES (1), (2), (5);
Du kan MODIFY
kolonnen for at omdefinere den med AUTO_INCREMENT
mulighed:
mysql> ALTER TABLE foo MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;
Bekræft, at dette er trådt i kraft:
mysql> SHOW CREATE TABLE foo;
Udgange:
CREATE TABLE foo (
`id` INT(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1
Bemærk, at du har ændret kolonnedefinitionen på plads, uden at det er nødvendigt at oprette en anden kolonne og slette den oprindelige kolonne. PRIMARY KEY
begrænsning er upåvirket, og du behøver ikke at nævne det i ALTER TABLE
erklæring.
Dernæst kan du teste, at en insert genererer en ny værdi:
mysql> INSERT INTO foo () VALUES (); -- yes this is legal syntax
mysql> SELECT * FROM foo;
Udgange:
+----+
| id |
+----+
| 1 |
| 2 |
| 5 |
| 6 |
+----+
4 rows in set (0.00 sec)
Jeg testede dette på MySQL 5.0.51 på Mac OS X.
Jeg testede også med ENGINE=InnoDB
og en afhængig tabel. Ændring af id
kolonnedefinition afbryder ikke referentiel integritet.
For at svare på fejlen 150, du nævnte i din kommentar, er det sandsynligvis en konflikt med begrænsningerne for fremmednøgle. Jeg beklager, efter at jeg havde testet det, troede jeg, at det ville virke. Her er et par links, der kan hjælpe med at diagnosticere problemet:
- Hvad betyder mysql-fejl 1025 (HY000):Fejl ved omdøbning af './foo' (errorno:150)?
- http://www.simplicidade.org/notes/ archives/2008/03/mysql_errno_150.html