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

cambiar los id (auto_increment)

Estas en el tema de cambiar los id (auto_increment) en el foro de Mysql en Foros del Web. hola! me gsutaría saber si es posible actualizar los ID (autoincrementables), resulta que he borrado los 10 primeros registros de mi db y ahora empiezan ...
  #1 (permalink)  
Antiguo 27/06/2011, 03:15
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 1 mes
Puntos: 17
cambiar los id (auto_increment)

hola! me gsutaría saber si es posible actualizar los ID (autoincrementables), resulta que he borrado los 10 primeros registros de mi db y ahora empiezan del 11, me gustaría modificarlo para que comiencen del 1, ¿eso es posible?



Gracias!
  #2 (permalink)  
Antiguo 27/06/2011, 03:25
 
Fecha de Ingreso: junio-2011
Mensajes: 139
Antigüedad: 12 años, 10 meses
Puntos: 42
Información Respuesta: cambiar los id (auto_increment)

Hola cucuru,

Puedes encontrar una opción en [url=http://dev.mysql.com/doc/refman/5.5/en/example-auto-increment.html]3.6.9. Using AUTO_INCREMENT[/url].
  #3 (permalink)  
Antiguo 27/06/2011, 04:43
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 1 mes
Puntos: 17
Respuesta: cambiar los id (auto_increment)

Disculpa wchiquito, pero no veo la información que necesito en ese enlace! puedes especificar un poquito más?

Gracais!
  #4 (permalink)  
Antiguo 27/06/2011, 06:08
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: cambiar los id (auto_increment)

Lee las FAQs del Foro: Renumerar campos auto_increment

Luego veamos si realmente tiene sentido lo que preguntas...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 27/06/2011, 07:07
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 1 mes
Puntos: 17
Respuesta: cambiar los id (auto_increment)

gnzsoloyo, hace falta ser desagradable? he leído muchos de tus comentarios, y aunque en muchísimas ocasiones me hayas ayudado encuentro mucho más que sin lugar esa prepotencia que gastas.

Quizá tú no lo veas con sentido, pero tengo una base de datos de prueba que me gustaría actualizar, puesto que para mis compañeros, sin conocimientos de bases de datos les resulta más amigable, y nuestro trabajo se simplifica, ¿es un motivo realmente bueno para tí?
  #6 (permalink)  
Antiguo 27/06/2011, 08:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: cambiar los id (auto_increment)

El tema de si mis modos son o no como dices es algo que podemos tratar por MP. No voy a decir nada acá porque nos desviaría del asunto de tu pregunta. Sólo diré que rara vez he tenido algún conflicto por alguna frase y normalmente ha sido un malentendido.

El asunto de renumerar los autoincrementales es un tema recurrente en este foro, por eso te puse el link. Lo otro fue una reflexión. Cada tanto alguien consulta por lo mismo, y siempre es en definitiva dentro del mismo contexto de problemas. Normalmente siempre le aconsejamos lo mismo: No es necesario, no aporta nada, no es conveniente por varias razones, etc.. Por eso ese post está entre las FAQs de MySQL.

En definitiva:
- ¿Es conveniente hacerlo?
En la inmensa mayoría de los casos NO. En muy contadas y raras ocasiones puede aportar algo al modelo de datos. Pero por lo general el problema se origina a causa de que los AI son sencillos de entender para los programadores, y los usan indiscriminadamente sin tener idea de los problemas que causan a futuro, tanto en el mantenimiento como en las migraciones. Es algo de fiaca de programar, como se suele decir entre los de Bases de Datos.
Como son fáciles de programar, se suele creer que son lo mejor y no es así. En mi práctica no he encontrado casos en donde no pueda resolver el problema directamente suprimiendo los AI y poniendo una PK más ortodoxa, que no dependa de ellos.

- ¿Trae alguna ventaja?
Renumerar no produce realmente ninguna ventaja a la base de datos o a las aplicaciones. Si no es por una cuestión estética, en la mayoría de las ocasiones, la renumeración sólo se traduce en tiempo de procesamiento consumido.

- ¿Trae desventajas?
Causa serios problemas de migración cuando trabajas con tablas que no sean InnoDB, o en tablas InnODB donde las FK no hayan sido creadas con la opción ON UPDATE CASCADE. En esos casos la migración de datos debe crearse manualmente, con todo lo que conlleva.
Además, si hay datawarehosues, bases de respaldo, paralelas o backups históricos, generan inconsistencia de datos que no se puede resolver fácilmente.

- ¿Hay buenos motivos para hacerlo?
Personalmente no veo que las razones que expones sean técnicas, sería interesante saber qué es lo que hace que una numeración consecutiva sea "amigable" como comentas, o cómo se facilita el trabajo. Si las ven "mejores", no parece ser por cuestiones ni de performance, ni necesidades del sistema, ni tampoco parecen surgir de las reglas del negocio o del relevamientos del sistema mismo. Y si no entra en ninguna de esas categorías...
Por otro lado, ten en cuenta primero que no necesitas obligatoriamente una PK autonumerica, sino una PK elegida según el modelo E-R. Eso realmente te produciría ventajas en varios niveles. Además, se trata de una solución absolutamente transitoria, porque si esos registros se pueden borrar por necesidades del sistema, eventualmente tendrás el mismo problema de "huecos" dentro de un tiempo. ¿Volverás entonces a "renumerar"?

En definitiva, si aún así quieres hacerlo, para eso tienes que modificar la tabla (ALTER TABLE... AUTO_INCREMENT = 1;), porque el AI está en la definición de la misma.
El problema es que si la tabla ya tiene datos, no podrás hacerlo sin hacer una migración porque la renumeración desde 1 hará que en un momento dado se genere un conflicto de clave duplicada.

Otra posibilidad es medio brutal: Borrar el campo y volverlo a definir. Esto es efectivo si y sólo si no hay tablas dependientes de la tabla modificada.
Si hay al menos una, no podrás hacerlo.
Y aún cuando puedas hacerlo, siempre tendrás que asegurarte que la información resultante en la base queda efectivamente consistente. No te olvides que mientras mayor es la complejidad de las relaciones, más probable es que no puedas modificar una PK sin armar un gran problema...

Una tercera situación es si estás en etapa de desarrollo y estás usando datos de prueba. En ese caso lo más simple es usar TRUNCATE en las tablas InnoDB. Eso elimina los datos y reinicia el DI. Pero con tablas MyISAM deberás aún así usar ALTER TABLE porque TRUNCATE no tiene efecto sobre el valor de AI.

Mi sugerencia final es simple: Trata de no usar PK que sean AI. No son obligatorias en el modelo relacional, ya que lo que define una PK no es eso, y traen problemas en las migraciones. Usar una PK mejor elegida es mucho mejor que usar un AI.
__________________
¿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; 27/06/2011 a las 08:58
  #7 (permalink)  
Antiguo 27/06/2011, 09:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: cambiar los id (auto_increment)

Noté por mis notificaciones que leíste este último post, pero no respondiste salvo un
Cita:
"Valoración negativa en cambiar los id... por cucuru que comentó 'no gracias' el 27/06/2011 a las 12:03"
Mmmm... No termino de entender a qué te refieres con "no gracias". Mira que el post es largo... te planteo varias cosas y alguna que otra pregunta.

En todo caso sería bueno que respondieras por este mismo medio a lo que te digo. Sea cual sea tu observación.

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

Etiquetas: Ninguno
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 19:24.