Zde je například tabulka, která má primární klíč, ale není AUTO_INCREMENT
:
mysql> CREATE TABLE foo (
id INT NOT NULL,
PRIMARY KEY (id)
);
mysql> INSERT INTO foo VALUES (1), (2), (5);
Můžete MODIFY
sloupec a předefinujte jej pomocí AUTO_INCREMENT
možnost:
mysql> ALTER TABLE foo MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;
Ověřte, že se to projevilo:
mysql> SHOW CREATE TABLE foo;
Výstupy:
CREATE TABLE foo (
`id` INT(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1
Všimněte si, že jste upravili definici sloupce na místě, aniž byste museli vytvořit druhý sloupec a původní sloupec vypustit. PRIMARY KEY
omezení není ovlivněno a nemusíte je uvádět v ALTER TABLE
prohlášení.
Dále můžete otestovat, že vložka generuje novou hodnotu:
mysql> INSERT INTO foo () VALUES (); -- yes this is legal syntax
mysql> SELECT * FROM foo;
Výstupy:
+----+
| id |
+----+
| 1 |
| 2 |
| 5 |
| 6 |
+----+
4 rows in set (0.00 sec)
Testoval jsem to na MySQL 5.0.51 na Mac OS X.
Také jsem testoval s ENGINE=InnoDB
a závislá tabulka. Úprava id
definice sloupce nenarušuje referenční integritu.
Chcete-li reagovat na chybu 150, kterou jste zmínili ve svém komentáři, je to pravděpodobně konflikt s omezeními cizího klíče. Omlouvám se, po vyzkoušení jsem si myslel, že to bude fungovat. Zde je několik odkazů, které mohou pomoci diagnostikovat problém:
- Co znamená chyba mysql 1025 (HY000):Chyba při přejmenování './foo' (errorno:150)?
- http://www.simplicidade.org/notes/ archives/2008/03/mysql_errno_150.html