Mysql
 sql >> Base de données >  >> RDS >> Mysql

Insertion d'une nouvelle ligne à l'aide d'un déclencheur sur la même table

Vous ne pourrez pas insérer dans la même table à partir d'un déclencheur . Je remplacerais votre déclencheur par une procédure, puis je canaliserais toutes les mises à jour de statut via la procédure :

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 ici

Bien que la procédure nécessitera quelques modifications de votre code (c'est-à-dire que vous devrez appeler la procédure plutôt que de mettre à jour les données directement), la procédure a l'avantage d'être plus évidente - les déclencheurs faisant les choses automatiquement en arrière-plan peuvent être non intuitifs.