sql >> Base de Datos >  >> RDS >> Mysql

hacer una identificación en una tabla mysql auto_increment (después del hecho)

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: