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:
- Cosa significa errore mysql 1025 (HY000):errore durante la ridenominazione di './foo' (errore:150)?
- http://www.simplicidade.org/notes/ archivi/2008/03/mysql_errno_150.html