sql >> Databasteknik >  >> RDS >> Mysql

gör ett ID i en mysql-tabell auto_increment (i efterhand)

Till exempel, här är en tabell som har en primärnyckel men inte är AUTO_INCREMENT :

mysql> CREATE TABLE foo (
  id INT NOT NULL,
  PRIMARY KEY (id)
);
mysql> INSERT INTO foo VALUES (1), (2), (5);

Du kan MODIFY kolumnen för att omdefiniera den med AUTO_INCREMENT alternativ:

mysql> ALTER TABLE foo MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;

Kontrollera att detta har trätt i kraft:

mysql> SHOW CREATE TABLE foo;

Utgångar:

CREATE TABLE foo (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1

Observera att du har ändrat kolumndefinitionen på plats, utan att behöva skapa en andra kolumn och ta bort den ursprungliga kolumnen. PRIMARY KEY begränsningen är opåverkad och du behöver inte nämna i ALTER TABLE uttalande.

Därefter kan du testa att en infogning genererar ett nytt värde:

mysql> INSERT INTO foo () VALUES (); -- yes this is legal syntax
mysql> SELECT * FROM foo;

Utgångar:

+----+
| id |
+----+
|  1 | 
|  2 | 
|  5 | 
|  6 | 
+----+
4 rows in set (0.00 sec)

Jag testade detta på MySQL 5.0.51 på Mac OS X.

Jag testade även med ENGINE=InnoDB och en beroende tabell. Ändra id kolumndefinitionen avbryter inte referensintegriteten.

För att svara på felet 150 som du nämnde i din kommentar, är det förmodligen en konflikt med de främmande nyckelbegränsningarna. Jag ber om ursäkt, efter att jag testat det trodde jag att det skulle fungera. Här är ett par länkar som kan hjälpa dig att diagnostisera problemet:



  1. Ansluter till MySQL via SSL med PHP

  2. Hur man ändrar ett databasnamn i SQL Server med T-SQL

  3. SQLite Ta bort

  4. Rails 3 Mysql-problem