Problema: Tengo una tabla con datos, con un id autoincrementado con varios cientos de miles de registros, para un proyecto en particular solo nesesito una fraccion de estos, asi que copio la tabla y borro los que no se van a usar asi no ocupan lugar, entonces, quedan enormes bucotes en los id. como es para un proyecto nuevo no puedo dejarlo asi, seria muy precario, no obstante esta tabla se relaciona con otras(con caracteristicas similares) por lo que la reorganizacion tiene que mantener la integridad.
Solucion:
El ejemplo se basa en una tabla de provincias, que tiene vinculadas localidades mediante claves foraneas.
0-> Antes que nada, asegurarse que todas las tablas que dependan de la que se va a reorganizar, (en ente caso la de localidades) tengan un comportamiento CASCADE para las actualizaciones.
Código MySQL:
Ver original
1-> Crear un indice redundante sobre la clave primaria de la tabla a reorganizar. (Para "engañar" a las claves foraneas)
Código MySQL:
Ver original
2-> Borrar el indice PRIMARY de la tabla.
Código MySQL:
Ver original
3-> Quitar el AUTO_INCREMENT de la ex clave primaria
Código MySQL:
Ver original
4-> Crear un campo auxiliar, con clave primaria y AUTO_INCREMENT
Código MySQL:
Ver original
ALTER TABLE `provincias` ADD `id_aux` SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY AFTER `id_provincia`;
5-> Actualizar los id originales.
Código MySQL:
Ver original
6-> Borrar el campo auxiliar.
Código MySQL:
Ver original
7-> Volver a agregar la clave primaria donde corresponde.
Código MySQL:
Ver original
8-> Agregar el autoincrementado.
Código MySQL:
Ver original
9-> Borrar el indice redundante
Código MySQL:
Ver original
10-> Si fuese el caso, se deveria devolver a las tablas dependientes el comportamiento a sus claves foraneas, cambiando el CASCADE por el que corresponda.