Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Einfügen einer neuen Zeile mit einem Trigger in derselben Tabelle

Sie werden nicht in der Lage sein, von einem Trigger in dieselbe Tabelle einzufügen . Ich würde Ihren Auslöser durch eine Prozedur ersetzen und dann alle Statusaktualisierungen durch die Prozedur leiten:

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 hier

Obwohl die Prozedur einige Änderungen an Ihrem Code erfordert (d. h. Sie müssen die Prozedur aufrufen, anstatt die Daten direkt zu aktualisieren), hat die Prozedur den Vorteil, dass sie offensichtlicher ist – Trigger, die Dinge automatisch im Hintergrund ausführen, können nicht intuitiv sein.