Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Machen Sie eine ID in einer MySQL-Tabelle auto_increment (im Nachhinein)

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: