Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Inserindo nova linha usando um gatilho na mesma tabela


Você não poderá inserir na mesma tabela a partir de um gatilho . Eu substituiria seu gatilho por um procedimento e, em seguida, canalizaria todas as atualizações de status por meio do procedimento:
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 aqui

Embora o procedimento exija alguma modificação em seu código (ou seja, você precisará chamar o procedimento em vez de atualizar os dados diretamente), o procedimento tem o benefício de ser mais óbvio - gatilhos que fazem coisas automaticamente em segundo plano podem não ser intuitivos.