トリガーから同じテーブルに挿入 することはできません。 。トリガーをプロシージャに置き換えてから、すべてのステータスの更新をプロシージャに転送します。
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;
プロシージャにはコードの変更が必要ですが(つまり、データを直接更新するのではなく、プロシージャを呼び出す必要があります)、プロシージャにはよりわかりやすいという利点があります。バックグラウンドで自動的に処理を実行するトリガーは直感的ではない場合があります。