sql >> Base de Datos >  >> RDS >> Mysql

Insertar una nueva fila usando un disparador en la misma tabla

No podrá insertar en la misma tabla desde un disparador . Reemplazaría su disparador con un Procedimiento y luego canalizaría todas las actualizaciones de estado a través del procedimiento:

CREATE PROCEDURE UpdateJobStatus(jobId INT, NewStatus NVARCHAR(50))
BEGIN
  UPDATE job
     SET `Status` = NewStatus 
     WHERE job_id = jobId;

  IF NewStatus = 'COMPLETED' AND jobId <=6 THEN
    INSERT INTO job(cycle_id, job_id, status) 
       SELECT cycle_id, job_id+1, 'WATING_TO_START'
       FROM job 
       WHERE job_id = jobId;
  END IF;
END;

Sql Fiddle aquí

Aunque el procedimiento requerirá algunas modificaciones en su código (es decir, deberá llamar al procedimiento en lugar de actualizar los datos directamente), el procedimiento tiene la ventaja de ser más obvio:los disparadores que hacen las cosas automáticamente en segundo plano pueden no ser intuitivos.