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

auto_increment

Estas en el tema de auto_increment en el foro de Mysql en Foros del Web. Saludos, nuevamente con mysql estoy en un callejón sin salida. Cree una tabla con la siguiente estructura: Código: CREATE TABLE tabla1 (id INT AUTO_INCREMENT PRIMARY ...
  #1 (permalink)  
Antiguo 14/09/2008, 22:43
Avatar de CrepitantE  
Fecha de Ingreso: octubre-2006
Ubicación: Colombia
Mensajes: 421
Antigüedad: 17 años, 6 meses
Puntos: 7
auto_increment

Saludos, nuevamente con mysql estoy en un callejón sin salida.

Cree una tabla con la siguiente estructura:


Código:
CREATE TABLE tabla1 (id INT AUTO_INCREMENT PRIMARY KEY, animal varchar(20));


A continuacion colocare un ejemplo para intentar ser explicito.

tabla1
+-------------+
| ID | ANIMAL |
+-------------+
| 1 _| Perro _+
+-------------+
| 2 _| Cerdo _+
+-------------+

| 3 _| Grillo +
+-------------+

| 4 _| Caballo+
+-------------+

| 5 _| Vaca __+
+-------------+

| 6 _| Oveja _+
+-------------+

Si borro el valor grillo(id=3) (DELETE FROM tabla1 WHERE id=3;)


Obtengo esto:

tabla1
+-------------+
| 1 _| Perro _+
+-------------+
| 2 _| Cerdo _+
+-------------+

| 4 _| Caballo+
+-------------+

| 5 _| Vaca __+
+-------------+

| 6 _| Oveja _+
+-------------+


y yo busco esto:

tabla1
+-------------+
| ID | ANIMAL |
+-------------+
| 1 _| Perro _+
+-------------+
| 2 _| Cerdo _+
+-------------+

| 3 _| Caballo+
+-------------+

| 4 _| Vaca __+
+-------------+

| 5 _| Oveja _+
+-------------+


En pocas palabras como hago para que se rueden los valores del ID es decir que (caballo=3 Vaca=4 y Oveja=5). Sin tener que rodarlos uno a uno con php.

Gracias de antemano por su ayuda.


__________________
-
  #2 (permalink)  
Antiguo 14/09/2008, 22:59
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Respuesta: auto_increment

Si lees lo que significa o como funciona AUTO_INCREMENT en MySQL, te vas a dar cuenta que el control lo lleva el motor de Base de Datos, por lo tanto, no vas a poder lograr eso a menos que sea por programación a como decis y reinciar el AUTO_INCREMENT nuevamente.
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #3 (permalink)  
Antiguo 15/09/2008, 08:28
Avatar de CrepitantE  
Fecha de Ingreso: octubre-2006
Ubicación: Colombia
Mensajes: 421
Antigüedad: 17 años, 6 meses
Puntos: 7
Respuesta: auto_increment

Gracias por tu respuesta BrujoNic.

Se me ocurre algo: Cada vez que se borre un dato reestablecer los ID's por medio de un bucle.
Tambien para evitar problemas con el script cambiar los datos antes de llamarlos, y claro modificar el valor de auto_increment.

No se si sea lo más correcto, pero teóricamente debe funcionar.
Algún consejo para hacerlo lo más efectivo posible (que no consuma tanto recursos)??
__________________
-
  #4 (permalink)  
Antiguo 15/09/2008, 08:49
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: auto_increment

CrepitantE,

yo te pregunto, y eso ¿para qué?
¿para hacer listados con los elementos numerados? Eso lo conseguirás fácilmente con programación (incluso puede hacerse con una consulta MySQL).

Lo importante de la clave primaria autoincrement es que es única y está indexada. Y para eso da igual que sea el 3 que el 4. Hay otros modos de hacer claves primarias (con texto o números específicos, por ej. el DNI de alguien o número de afiliación a la Seguridad Social). Tampoco hay una relación especial entre el 3 y el animal de la lista. Por lo demás, podrás numerar los elementos de una relación sacada de la base con programación; incluso alguna consulta SQL te permite hacerlo, sin necesidad de estar alterando el autoincrement.
En cuanto a lo de restablecer el id mediante un bucle, me parece una locura; ahora con pocos datos tal vez lo veas bien, pero con más datos verás que todo se ralentiza. Te expondré una situación parecida en la que me encuentro. Yo tengo una tabla con 6500 referencias que necesito reordenar cada vez que se cambia otro dato, concretamente cuando cambia el nombre; hago un truncate tabla cada vez que se cambia el campo alfabético; pues bien eso ralentiza todo muchísimo y resulta exasperante tener que esperar esos segundos; y eso por no hablarte del riesgo de inconsistencia y errores en las relaciones que pudieran producirse. Además, en una tabla MyIsam podrías hacerlo, pero no creo que se te permitiera en una tabla InnoDB.

Última edición por jurena; 15/09/2008 a las 08:54
  #5 (permalink)  
Antiguo 15/09/2008, 14:01
Avatar de CrepitantE  
Fecha de Ingreso: octubre-2006
Ubicación: Colombia
Mensajes: 421
Antigüedad: 17 años, 6 meses
Puntos: 7
Respuesta: auto_increment

Precisamente eso pensaba va a ralentizar demasiado el servidor, por eso aun no he creado el programa.

Lo que hice fue un sistema de comentarios de forma personalizable, se puede configurar cuantos registros mostrar por pagina, cuantas paginas, donde el id representa el numero del comentario. No conozco ampliamente MySQL (solo algunas cosillas básicas), Si uso el sistema del id cuando se elimine un comentario se me descuadra todo el script.

Pregunto existe alguna otra forma de numerar las filas???
__________________
-
  #6 (permalink)  
Antiguo 15/09/2008, 23:12
Avatar de CrepitantE  
Fecha de Ingreso: octubre-2006
Ubicación: Colombia
Mensajes: 421
Antigüedad: 17 años, 6 meses
Puntos: 7
Respuesta: auto_increment

Hola, ya logré solucionarlo.
No modifica en nada la base de datos, solamente condiciona un poco los resultados a mostrar.

Defini una variable ($x):
$x=1;
En el "while... mysql_fetch_row" le agregue un condicional que muestre los resultados (if $x <=$lim_superior && $x >= $lim_inferior){ imprima resultados } y por supuesto dentro del while un sumador $x++;

Gracias a ustedes por la información, otra cosa nueva que aprendo.
__________________
-
  #7 (permalink)  
Antiguo 08/11/2008, 14:46
 
Fecha de Ingreso: febrero-2008
Mensajes: 2
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: auto_increment

Si lo unico que quieres ir manteniendo los id consecutivos mientras lo vas eliminando una solucion seria la siguiente.

Supongamos que quieres eliminar la fila con id=3
delete from table 'tabla-nombre' where id=3

Luego deverias obtener la ultima fila de la tabla para ponerlo en remplazo de la 3
maximo = select max(id) from 'tabla-nombre':

update 'table-nombre' set id=3 where id= maximo.

y por ultimo:
alter table 'table-nombre' AUTO_INCREMENT= maximo
  #8 (permalink)  
Antiguo 09/11/2008, 06:48
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: auto_increment

elnano10,

la idea parece buena, pero si tienes dos tablas relacionadas y ese id es el Primary Key, tienes que cambiar también la Foreign Key de la otra tabla, y eso pensando que trabajas con MyISam, porque no se te permitiría con InnoDB.
Y, por otra parte, imaginemos que borras los registros cuyo nombre es Luis, es decir, los id 42, 315, 413, 201, 2, por poner un ejemplo. No creo que quisieras guardar esos id en un array para ir asignándolos uno a uno.
Yo sigo pensando lo mismo y veo un gran riesgo para un objetivo que se consigue sencillamente con unas líneas de código de programación, me refiero a lo de asignar un número de orden, que sólo servirá para el orden de entrada de datos en la base y que tampoco será útil si, por ejemplo, ordenas por orden alfabético y quieres numerar.
Piénsalo bien: es mi consejo.
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 11:31.