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

Indsættelse af ny række ved hjælp af en trigger på samme tabel

Du vil ikke være i stand til at indsætte i den samme tabel fra en trigger . Jeg ville erstatte din trigger med en Procedure og derefter kanalisere alle statusopdateringer gennem proceduren:

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 her

Selvom proceduren vil kræve en vis ændring af din kode (dvs. du bliver nødt til at kalde proceduren frem for at opdatere dataene direkte), har proceduren fordelen af ​​at være mere indlysende - triggere, der gør ting automatisk i baggrunden, kan være ikke-intuitive.




  1. Fundamentals of Table Expressions, Del 12 – Inline Table-Valued Functions

  2. Brug af CASE-udtryk i SQL Server

  3. Hvordan fjerner du dubletter fra kommasepareret liste med regex i Oracle, men jeg vil ikke have dubletter værdier?

  4. Vælg MAX eller Bestil efter grænse 1