sql >> Databasteknik >  >> RDS >> Mysql

Infogar ny rad med en trigger på samma tabell

Du kommer inte att kunna infoga i samma tabell från en utlösare . Jag skulle ersätta din trigger med en procedur och sedan kanalisera alla statusuppdateringar genom 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 här

Även om proceduren kommer att kräva viss modifiering av din kod (dvs. du kommer att behöva anropa proceduren snarare än att uppdatera data direkt), har proceduren fördelen av att vara mer uppenbar - triggers som gör saker automagiskt i bakgrunden kan vara icke-intuitiva.




  1. MySQL välj slumpmässig rad med JOIN från två tabeller

  2. Rethink Flask – En enkel att göra-lista som drivs av Flask och RethinkDB

  3. Geodjango Undantag vid import av django.contrib.gis.gdal:OSError:/usr/lib/libgdal.so.1:odefinierad symbol:sqlite3_column_table_name

  4. Rekommenderade Intel-processorer för SQL Server 2014-arbetsbelastningar