Por ejemplo, aquí hay una tabla que tiene una clave principal pero no es AUTO_INCREMENT
:
mysql> CREATE TABLE foo (
id INT NOT NULL,
PRIMARY KEY (id)
);
mysql> INSERT INTO foo VALUES (1), (2), (5);
Puedes MODIFY
la columna para redefinirla con AUTO_INCREMENT
opción:
mysql> ALTER TABLE foo MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;
Verifica que esto haya tenido efecto:
mysql> SHOW CREATE TABLE foo;
Salidas:
CREATE TABLE foo (
`id` INT(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1
Tenga en cuenta que ha modificado la definición de la columna en su lugar, sin necesidad de crear una segunda columna y eliminar la columna original. La PRIMARY KEY
la restricción no se ve afectada, y no necesita mencionarla en ALTER TABLE
declaración.
A continuación, puede probar que una inserción genera un nuevo valor:
mysql> INSERT INTO foo () VALUES (); -- yes this is legal syntax
mysql> SELECT * FROM foo;
Salidas:
+----+
| id |
+----+
| 1 |
| 2 |
| 5 |
| 6 |
+----+
4 rows in set (0.00 sec)
Probé esto en MySQL 5.0.51 en Mac OS X.
También probé con ENGINE=InnoDB
y una tabla dependiente. Modificando el id
la definición de columna no interrumpe la integridad referencial.
Para responder al error 150 que mencionó en su comentario, probablemente sea un conflicto con las restricciones de clave externa. Mis disculpas, después de probarlo pensé que funcionaría. Aquí hay un par de enlaces que pueden ayudar a diagnosticar el problema:
- ¿Qué significa el error mysql 1025 (HY000):error al cambiar el nombre de './foo' (errorno:150)?
- http://www.simplicidade.org/notes/ archivos/2008/03/mysql_errno_150.html