Mysql
 sql >> Database >  >> RDS >> Mysql

crea un ID in una tabella mysql auto_increment (dopo il fatto)

Ad esempio, ecco una tabella che ha una chiave primaria ma non è AUTO_INCREMENT :

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

Puoi MODIFY la colonna per ridefinirla con AUTO_INCREMENT opzione:

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

Verifica che sia entrato in vigore:

mysql> SHOW CREATE TABLE foo;

Uscite:

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

Si noti che è stata modificata la definizione di colonna sul posto, senza richiedere la creazione di una seconda colonna e l'eliminazione della colonna originale. La PRIMARY KEY il vincolo non è interessato e non è necessario menzionarlo in ALTER TABLE dichiarazione.

Successivamente puoi verificare che un inserto generi un nuovo valore:

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

Uscite:

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

L'ho testato su MySQL 5.0.51 su Mac OS X.

Ho anche testato con ENGINE=InnoDB e una tabella dipendente. Modifica dell'id la definizione di colonna non interrompe l'integrità referenziale.

Per rispondere all'errore 150 che hai menzionato nel tuo commento, è probabilmente un conflitto con i vincoli della chiave esterna. Mi scuso, dopo averlo testato ho pensato che avrebbe funzionato. Ecco un paio di link che possono aiutare a diagnosticare il problema: