Mysql
 sql >> Database >  >> RDS >> Mysql

Inserimento di una nuova riga utilizzando un trigger sulla stessa tabella

Non potrai inserire nella stessa tabella da un trigger . Sostituirei il tuo trigger con una Procedura, quindi canalizzerei tutti gli aggiornamenti di stato attraverso la procedura:

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 qui

Sebbene la procedura richieda alcune modifiche al tuo codice (ovvero dovrai chiamare la procedura piuttosto che aggiornare i dati direttamente), la procedura ha il vantaggio di essere più ovvia:i trigger che fanno le cose automaticamente in background possono non essere intuitivi.