我有一個表JOB
。它有以下列:cycle_id, job_id, status
。在同一張桌子上使用觸發器插入新行
每個週期有7個作業執行。所以cycle_id
和job_id
構成複合主鍵。
狀態列可以具有以下值:WAITING_TO_START, RUNNING. COMPLETED
。
每個工作都是cron工作。而每個工作都是不同人的責任,所以要同步每個人我使用的數據庫表JOB。每個作業都會監聽JOB表並觀察它是否有一行的job_id和狀態爲'WAITING_TO_START'。所以,當工作狀態更改爲COMPLETED時,我想要的是,cycle_id
與更新的作業相同,job_id作爲更新作業的ID + 1,狀態爲「WAITING_TO_START」創建下一個作業行。所以,我創建了一個觸發此爲:
DELIMITER $$
CREATE TRIGGER start_new_job
AFTER UPDATE ON job
FOR EACH ROW
BEGIN
IF NEW.status = 'COMPLETED' AND OLD.job_id <=6 THEN
INSERT INTO job(cycle_id, job_id, status) VALUES (OLD.cycle_id, OLD.job_id+1, 'WATING_TO_START');
END IF;
END$$
DELIMITER ;
但是,當我對工作表進行更新,我得到以下錯誤:
UPDATE job SET status='COMPLETED' WHERE cycle_id=1 AND job_id=1;
ERROR 1442(HY000):不能更新在存儲函數/觸發器中的表'作業',因爲它已經被調用該存儲函數/觸發器的語句使用。
那麼有沒有一種方法來實現同步。我不希望每項工作都會在下一份工作的編號中創建一行。我希望它自動處理。這個觸發器可以以不同的方式寫入,還是應該使用其他一些機制。