Hier ist zum Beispiel eine Tabelle, die einen Primärschlüssel hat, aber nicht AUTO_INCREMENT
ist :
mysql> CREATE TABLE foo (
id INT NOT NULL,
PRIMARY KEY (id)
);
mysql> INSERT INTO foo VALUES (1), (2), (5);
Sie können MODIFY
die Spalte, um sie mit dem AUTO_INCREMENT
neu zu definieren Möglichkeit:
mysql> ALTER TABLE foo MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;
Überprüfen Sie, ob dies wirksam geworden ist:
mysql> SHOW CREATE TABLE foo;
Ausgaben:
CREATE TABLE foo (
`id` INT(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1
Beachten Sie, dass Sie die vorhandene Spaltendefinition geändert haben, ohne eine zweite Spalte erstellen und die ursprüngliche Spalte löschen zu müssen. Der PRIMARY KEY
Einschränkung ist nicht betroffen, und Sie müssen in ALTER TABLE
nicht erwähnen Aussage.
Als nächstes können Sie testen, ob eine Einfügung einen neuen Wert erzeugt:
mysql> INSERT INTO foo () VALUES (); -- yes this is legal syntax
mysql> SELECT * FROM foo;
Ausgaben:
+----+
| id |
+----+
| 1 |
| 2 |
| 5 |
| 6 |
+----+
4 rows in set (0.00 sec)
Ich habe dies auf MySQL 5.0.51 auf Mac OS X getestet.
Ich habe auch mit ENGINE=InnoDB
getestet und eine abhängige Tabelle. Ändern der id
Spaltendefinition unterbricht nicht die referentielle Integrität.
Um auf den Fehler 150 zu reagieren, den Sie in Ihrem Kommentar erwähnt haben, handelt es sich wahrscheinlich um einen Konflikt mit den Fremdschlüsselbeschränkungen. Entschuldigung, nachdem ich es getestet hatte, dachte ich, es würde funktionieren. Hier sind ein paar Links, die bei der Diagnose des Problems hilfreich sein können:
- Was bedeutet mysql error 1025 (HY000):Error on rename of './foo' (errorno:150)?
- http://www.simplicidade.org/notes/ archives/2008/03/mysql_errno_150.html