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

Actualizar los id

Estas en el tema de Actualizar los id en el foro de Mysql en Foros del Web. Hola, foreros! Espero que podais ayudarme... jeje. Mirar tengo una tabla con una columna llamada 'id' que es autoincremente, es primaria (que desconozco que es) ...
  #1 (permalink)  
Antiguo 22/11/2008, 19:13
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años, 7 meses
Puntos: 19
Actualizar los id

Hola, foreros!

Espero que podais ayudarme... jeje. Mirar tengo una tabla con una columna llamada 'id' que es autoincremente, es primaria (que desconozco que es) y de tipo int(11).

Tengo muchos registros en esa tabla... lo que queria hacer es que si se borra uno de ellos por ejemplos el segundo, el cual tiene un id = 2. El tercero pasase a tener un id = 2. Es decir, que se ordenasen de nuevo desde el inicio.

¿Como puedo hacerlo?
  #2 (permalink)  
Antiguo 22/11/2008, 19:28
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: Actualizar los id

Empecemos con definir lo que ignoras:
Según Wikipedia, en un resumen bastante simple y entendible:
Cita:
Clave primaria:
En el diseño de bases de datos relacionales, se llama clave primaria a un campo o a una combinación de campos que identifica de forma única a cada fila de una tabla. Una clave primaria comprende de esta manera una columna o conjunto de columnas. No pueden haber dos filas en una tabla que tengan la misma clave primaria.

Una clave primaria debe identificar unívocamente a todas las posibles filas de una tabla y no solo a las filas que se encuentran en un momento determinado. Ejemplos de claves primarias son DNI (asociado a una persona) o ISBN (asociado a un libro). Las guias telefónicas y diccionarios no pueden usar nombres o palabras o números del sistema decimal de Dewey como claves candidatas, porque identifican unívocamente números de teléfono o palabras.

Una clave primaria es un caso especial de clave única. La mayor diferencia es que para claves únicas, no se impone automáticamente la restricción implícita NOT NULL, mientras que para claves primarias, sí. Así, los valores en columnas de clave única pueden o no ser NULL. Otra diferencia es que las claves primarias deben definirse por medio de otra sintaxis.
A esto se debe agregar que:
a) Un campo AUTO_INCREMENT en MySQL es automáticamente definido como PRIMARY KEY.
b) Por definición, una PRIMARY KEY (PK) crea en forma automática un índice agrupado (cluster), que se utiliza para mantener el ordenamiento físico de los registros. Por esa razón también es único (un conjunto de datos no puede tener dos ordenamientos físicos diferentes en el disco, ¿o como ordenarías una biblioteca de dos formas al mismo tiempo?)

Respecto a tu problema, hace un tiempo se planteó este mismo asunto y sintéticamente lo que le comenté al forista era:

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 resulta ineficiente y solamente resulta en tiempo de PC consumido.

3. Renumerar un campo autoincremental, genera un nuevo ordenamiento FISICO de los datos, con la consiguiente sobrecarga del microprocesador, porque tiene que reescribir físicamente la tabla otra 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 puede 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 incremental? ¿para qué perder tiempo en renumerar?, ¿para que quede más lindo? .

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: a 16.777.215
- INT: 0 a 4.294.967.295.
- BIGINT: 0 a 18.446.744.073.709.551.615

¿Esperas usar más IDs que eso?

Creo que deberías olvidarte del asunto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 22/11/2008 a las 19:40
  #3 (permalink)  
Antiguo 23/11/2008, 13:25
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años, 7 meses
Puntos: 19
Respuesta: Actualizar los id

Hola, gnzsoloyo!

Debe ser la respuesta mas completa que me han hecho... jeje. Entendi bastante... realmente no entendi la finalidad del id completamente hasta ahora. Lo del dni me ha gustado, entenderlo como unico, eso es lo que necesitaba comprender.

Entonces los dejare como estan... jeje

Bueno... muchisimas gracias!
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 13:58.