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

Adquirí una base de datos de otro desarrollador. No usó auto_incrementers en ninguna tabla. Todos tienen ID de clave principal, pero hizo todo el incremento manualmente, en código.

¿Puedo convertirlos en Auto_incrementers ahora?


Guau, muy bien, muchas gracias. Funcionó sin problemas en una de mis mesas. Pero en una segunda tabla, recibo este error … Error al cambiar el nombre de ‘. \ DBNAME # sql-6c8_62259c’ a ‘. \ DBNAME \ dealer_master_events’

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); 

Puede MODIFY la columna para redefinirla con la opción AUTO_INCREMENT :

 mysql> ALTER TABLE foo MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT; 

Verifique que esto haya tenido efecto:

 mysql> SHOW CREATE TABLE foo; 

Productos:

 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 soltar la columna original. La restricción PRIMARY KEY no se ve afectada, y no necesita mencionar in en la instrucción ALTER TABLE .

A continuación, puede probar que un inserto genera un nuevo valor:

 mysql> INSERT INTO foo () VALUES (); -- yes this is legal syntax mysql> SELECT * FROM foo; 

Productos:

 +----+ | 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. La modificación de la definición de la columna de id no interrumpe la integridad referencial.


Para responder al error 150 que mencionaste en tu comentario, probablemente sea un conflicto con las restricciones de clave externa. Mis disculpas, después de haberlo probado, pensé que funcionaría. Aquí hay un par de enlaces que pueden ayudar a diagnosticar el problema:

Supongo que no necesita volver a incrementar los datos existentes, entonces, ¿por qué no puede ejecutar simplemente un comando ALTER TABLE para cambiar los atributos de PK?

Algo como:

 ALTER TABLE `content` CHANGE `id` `id` SMALLINT( 5 ) UNSIGNED NOT NULL AUTO_INCREMENT 

He probado este código en mi propia base de datos MySQL y funciona, pero no lo he probado con ningún número significativo de registros. Una vez que haya alterado la fila, deberá restablecer el incremento en un número garantizado que no interfiera con ningún otro registro.

 ALTER TABLE `content` auto_increment = MAX(`id`) + 1 

Nuevamente, no probado pero creo que funcionará.

Ninguno de los anteriores funcionó para mi mesa. Tengo una tabla con un entero sin signo como la clave principal con valores que van de 0 a 31543. Actualmente hay más de 19 mil registros. Tuve que modificar la columna en AUTO_INCREMENT ( MODIFY COLUMN ‘id’ INTEGER UNSIGNED NOT NULL AUTO_INCREMENT ) y establecer el valor inicial ( AUTO_INCREMENT = 31544 ) en la misma instrucción.

 ALTER TABLE `'TableName'` MODIFY COLUMN `'id'` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT = 31544; 

Esto funcionó para mí (quería hacer la identificación primaria y establecer el incremento automático)

ALTER TABLE table_name CHANGE id id INT PRIMARY KEY AUTO_INCREMENTO;

Sí, fácil. Simplemente ejecute una consulta de definición de datos para actualizar las tablas, agregando una columna AUTO_INCREMENT.

Si tiene una base de datos existente, tenga cuidado de preservar cualquier relación de clave externa que pueda existir en las claves primarias “creadas artificialmente”.

Siempre que tenga enteros únicos (o algún valor único) en la PK actual, podría crear una nueva tabla e insertarla con IDENTITY INSERT ON. A continuación, suelte la tabla anterior y cambie el nombre de la nueva tabla.

No te olvides de recrear cualquier índice.

    Intereting Posts