Ver Mensaje Individual
  #6 (permalink)  
Antiguo 08/05/2012, 15:21
davikt
 
Fecha de Ingreso: mayo-2012
Mensajes: 42
Antigüedad: 12 años, 6 meses
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.