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

Actualizar ids

Estas en el tema de Actualizar ids en el foro de Mysql en Foros del Web. tengo un problema ingreso los datos en una tabla ejemplo id | nombre 1 | andres 2 | felipe 3 | arias pero si elimino ...
  #1 (permalink)  
Antiguo 08/05/2012, 11:21
 
Fecha de Ingreso: mayo-2012
Mensajes: 12
Antigüedad: 12 años
Puntos: 1
Pregunta Actualizar ids

tengo un problema
ingreso los datos en una tabla ejemplo

id | nombre

1 | andres
2 | felipe
3 | arias

pero si elimino uno por ejemplo el de id 2 queda

1 | andres
3 | arias

como puedo actualizar los datos para que quede


1 | andres
2 | arias

al que me pueda ayudar muchas Gracias!!!
  #2 (permalink)  
Antiguo 08/05/2012, 11:29
 
Fecha de Ingreso: mayo-2012
Mensajes: 42
Antigüedad: 12 años
Puntos: 5
Respuesta: Actualizar ids

Hola afarias62,

Una pregunta para decirte lo que sea, ¿el id es auto-incrementado?

Si no podrías crear un trigger que después de eliminar una fila y a partir del número id eliminado vaya restando 1 a todos los ids que haya.
  #3 (permalink)  
Antiguo 08/05/2012, 11:35
 
Fecha de Ingreso: mayo-2012
Mensajes: 12
Antigüedad: 12 años
Puntos: 1
Respuesta: Actualizar ids

Cita:
Iniciado por davikt Ver Mensaje
Hola afarias62,

Una pregunta para decirte lo que sea, ¿el id es auto-incrementado?

Si no podrías crear un trigger que después de eliminar una fila y a partir del número id eliminado vaya restando 1 a todos los ids que haya.

Hola davikt ,

si el id es auto-incremento

pero me podrias decir como seria ese trigger :D es que la verdad he pensado mucho en ello y no me ha salido :(
  #4 (permalink)  
Antiguo 08/05/2012, 12:10
 
Fecha de Ingreso: mayo-2012
Mensajes: 42
Antigüedad: 12 años
Puntos: 5
Respuesta: Actualizar ids

Hola afarias,

Tendrías que quitarle el auto_increment al id (nose si te conviene mucho).
Este es el código que se supone que lo haría (la verdad no lo he pensado mas a fondo)
Código:
drop schema if exists ejemplo;
create schema ejemplo;
use ejemplo;

create table nombres (
    id int primary key /*auto_increment*/,
    nombre varchar(50)
    );
    
insert into nombres values(1,'andres');
insert into nombres values(2,'felipe');
insert into nombres values(3,'arias');

delimiter $$

create trigger id_org after delete on nombres
    for each row 
    begin
        declare id_ini int default 0;
        set id_ini=old.id;
        repeat
            update nombres set id=id-1 where id=id_ini;
            set id_ini=id_ini+1;
        until id_ini=(select count(id) from nombres) end repeat;
    end $$
    
delimiter ;

delete from nombres where id=2;
El error que reporta es que no se puede actualizar una tabla mientras está siendo usada por un trigger. Le daré unas cuantas vueltas al cogote y te comento si se me ocurre algo.

¡Un saludo!
  #5 (permalink)  
Antiguo 08/05/2012, 12:20
 
Fecha de Ingreso: mayo-2012
Mensajes: 12
Antigüedad: 12 años
Puntos: 1
Respuesta: Actualizar ids

ok, muchas Gracias davikt , estaré pendiente :D (Y)
  #6 (permalink)  
Antiguo 08/05/2012, 15:21
 
Fecha de Ingreso: mayo-2012
Mensajes: 42
Antigüedad: 12 años
Puntos: 5
Respuesta: Actualizar ids

Hola Afarias62,

Como te he dicho antes no se puede modificar una tabla mientas se está ejecutando una función o trigger ya que la misma se bloquea, para esas tareas durante todo el proceso.

La única solución que se me ha ocurrido es automatizar el proceso, es decir, creas un procedimiento que lo que haga sea reorganizarte las ids que lo lanzas manualmente después de borrar. Ahora te pongo el código pero, por ejemplo, si borras la id 2, después ejecutas un procedimiento del tipo reorganizar(2).

Es la mejor solución que se me ha ocurrido a tu problema, ya que desde la propia base de datos no puedes controlar eso, si que lo podrías hacer desde la aplicación que programes contra ella, diciendo que cada vez que haga un delete que le meta el call del procedimiento.

Y ahora la parte del código:

Creamos la base de datos:
Código:
drop schema if exists ejemplo;
create schema ejemplo;
use ejemplo;

create table nombres (
    id int primary key,
    nombre varchar(50)
    );
    
insert into nombres values(1,'andres');
insert into nombres values(2,'felipe');
insert into nombres values(3,'arias');
Creamos el procedimiento:
Código:
delimiter $$

create procedure sp_reorganizar (n_id int)
    begin
        repeat
            update nombres set id=id-1 where id=n_id+1;
            set n_id=n_id+1;
        until n_id>(select count(id) from nombres) end repeat;
    end$$
    
delimiter ;
Simulamos una eliminación:
Código:
delete from nombres where id=2;
Y llamamos al procedimiento:
Código:
call sp_reorganizar(2);
El parámetro que le pasas al procedimiento es la id que borras.

Eso es todo lo que se me ocurre, un saludo y espero que te sirva.
  #7 (permalink)  
Antiguo 08/05/2012, 16:10
 
Fecha de Ingreso: mayo-2012
Mensajes: 12
Antigüedad: 12 años
Puntos: 1
Respuesta: Actualizar ids

davikt!!! Muchas Gracias Me sirvió de mucho!!!
excelente código!!!!
:D (Y)

Etiquetas: actualizartabla, modificar-tablas, procedures
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 03:47.