Например, ето таблица, която има първичен ключ, но не е AUTO_INCREMENT
:
mysql> CREATE TABLE foo (
id INT NOT NULL,
PRIMARY KEY (id)
);
mysql> INSERT INTO foo VALUES (1), (2), (5);
Можете да MODIFY
колоната, за да я предефинирате с AUTO_INCREMENT
опция:
mysql> ALTER TABLE foo MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;
Проверете дали това е влязло в сила:
mysql> SHOW CREATE TABLE foo;
Изходи:
CREATE TABLE foo (
`id` INT(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1
Имайте предвид, че сте променили дефиницията на колоната на място, без да се налага да създавате втора колона и да изпускате оригиналната колона. PRIMARY KEY
ограничението не се влияе и не е необходимо да споменавате в ALTER TABLE
изявление.
След това можете да тествате дали вмъкването генерира нова стойност:
mysql> INSERT INTO foo () VALUES (); -- yes this is legal syntax
mysql> SELECT * FROM foo;
Изходи:
+----+
| id |
+----+
| 1 |
| 2 |
| 5 |
| 6 |
+----+
4 rows in set (0.00 sec)
Тествах това на MySQL 5.0.51 на Mac OS X.
Тествах и с ENGINE=InnoDB
и зависима таблица. Промяна на id
дефиницията на колона не прекъсва референтната цялост.
За да отговорите на грешката 150, която споменахте в коментара си, вероятно това е конфликт с ограниченията на външния ключ. Моите извинения, след като го тествах си помислих, че ще работи. Ето няколко връзки, които могат да помогнат за диагностицирането на проблема:
- Какво означава mysql грешка 1025 (HY000):Грешка при преименуване на './foo' (errorno:150)?
- http://www.simplicidade.org/notes/ archives/2008/03/mysql_errno_150.html