Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Reordenar campo auto_increment

Estas en el tema de Reordenar campo auto_increment en el foro de Mysql en Foros del Web. Hola, digamos que tengo una tabla con el campo "id" como auto_increment, y tengo 3 registros en la tabla: Uno con id 1, otro con ...
  #1 (permalink)  
Antiguo 30/08/2009, 13:41
 
Fecha de Ingreso: septiembre-2005
Ubicación: Valencia
Mensajes: 738
Antigüedad: 19 años, 3 meses
Puntos: 5
Pregunta Reordenar campo auto_increment

Hola, digamos que tengo una tabla con el campo "id" como auto_increment, y tengo 3 registros en la tabla: Uno con id 1, otro con id 5 y otro con id 6.

¿Como puedo reordenar el campo auto_increment de esta tabla para que los 3 registros tengan id 1, 2 y 3 respectivamente?

Gracias!
__________________
http://www.pkmrpg.es
  #2 (permalink)  
Antiguo 31/08/2009, 04:09
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 9 meses
Puntos: 574
Respuesta: Reordenar campo auto_increment

Si creas una tabla nueva con la misma estructura y haces un

insert into nuevatabla (nombrecampo1,nombrecampo2,...)
select nombrecampo1,nombrecampo2,... from tutabla
order by id

(donde id solo aparece en el order by)

obtendras lo que buscas en la nueva tabla.


Pero si lo que quieres es usar un auto_increment para tener un numerador sin saltos te equivocas puesto que cada vez que elimines un registro se te van a producir saltos...

Un auto_increment SOLO te asegura que cada nuevo registro tendrá un valor superior al ultimo ingresado....


Supongamos que tienes

id,....
1,...
2,...
3,...
4,...
5,...
...
1.000.000,...

y eliminas el registro 2, el motor de bases de datos tendria que actualizar 999.998 registros mas todos los que puedan estar referenciados a ese identificador en otras tablas para poder mantener el numerador ordenado y sin saltos cuando a efectos de indetificador no tiene la menor importancia....

Es decir una cosa estetica puede complicar mucho la vida....

Si lo que quieres es un contador de registros puedes forzarlo en el momento de printar el listado, con el leguaje que estes usando, php, jsp, asp... pero será eso un contador no el identifcador...

Quim
  #3 (permalink)  
Antiguo 31/08/2009, 05:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Reordenar campo auto_increment

Una PK basada en un campo numérico no se debe renumerar por cuestiones estéticas, ya que debes tener en cuenta que:
1. No es conveniente "reorganizar" un índice autoincremental porque en esencia es una tarea sin funcionalidad, carente de practicidad y consumidora innecesaria de tiempo de proceso.

2. El renumerar las PRIMARY KEY de un campo incremental no produce ninguna mejora en la optimización de consultas, por lo que hacerlo solamente resulta en tiempo de PC consumido.

3. Renumerar un campo autoincremental, genera un nuevo ordenamiento FISICO de los datos (una PK genera un índice cluster), con la consiguiente sobrecarga del microprocesador, porque tiene que reescribir físicamente la tabla cada vez y reconstruir el índice completamente.

4. Tampoco es recomendable bajo ninguna circunstancia renumerar una PK (es el caso en MySQL donde un AUTOINCREMENT es PK por default) si se usa como FK de otras tablas, porque generará inconsistencia de datos entre registros de tablas relacionadas.

5. No se recomienza renumerar si existen datos históricos de otras transacciones, que hacen referencia a otros registros que tenían el mismo número. De hecho, en una tabla de stock, las ID jamás cambian porque el hecho que un producto ya no exista ni se fabrique no quiere decir que no aparezca en registros más antiguos. Pisar un ID sería lo mismo que ponerle a un recién nacido el número de documento de un muerto.

6. Por otro lado, ¿qué te importa que tengas espacios de números que ya no usas, en tanto la numeración sea secuencial e incremental? ¿para qué perder tiempo en renumerar?, ¿para que quede más lindo? . Eso lo puedes hacer perfectamente en la interfase, donde visualizas la tabla de datos, o bien usando ciertas formas de consulta que te permiten un "orden" numérico transitorio que no afecta las tablas (ver link)

7. Si tu temor es quedarte sin números para usar, un ID generado en un campo numérico UNSIGNED tiene estos rangos:

- TINYINT: 0 a 255.
- SMALLINT: 0 a 65.535.
- MEDIUMINT: 0 a 16.777.215
- INT: 0 a 4.294.967.295.
- BIGINT: 0 a 18.446.744.073.709.551.615
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:38.