sql >> Database >  >> RDS >> Mysql

Nieuwe rij invoegen met een trigger op dezelfde tabel

U kunt niet invoegen in dezelfde tabel vanuit een trigger . Ik zou je trigger vervangen door een Procedure, en dan alle statusupdates door de procedure kanaliseren:

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

Hoewel de procedure enige aanpassing aan uw code vereist (d.w.z. u moet de procedure aanroepen in plaats van de gegevens rechtstreeks bij te werken), heeft de procedure het voordeel dat deze meer voor de hand ligt - triggers die dingen automatisch op de achtergrond doen, kunnen niet-intuïtief zijn.




  1. MySQL:Ongeldige standaardwaarde voor TIMESTAMP

  2. Hoe werkt de HEXTORAW()-functie? Wat is het algoritme?

  3. SQL-ontwikkelaarsfout met modules uitschakelen en doorgaan

  4. Bereken het aantal kalendermaanden dat twee datums omvatten