sql >> データベース >  >> RDS >> Mysql

同じテーブルでトリガーを使用して新しい行を挿入する

    トリガーから同じテーブルに挿入 することはできません。 。トリガーをプロシージャに置き換えてから、すべてのステータスの更新をプロシージャに転送します。

    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フィドル

    プロシージャにはコードの変更が必要ですが(つまり、データを直接更新するのではなく、プロシージャを呼び出す必要があります)、プロシージャにはよりわかりやすいという利点があります。バックグラウンドで自動的に処理を実行するトリガーは直感的ではない場合があります。




    1. PostgreSQLとMySQLの違いは何ですか?

    2. 2つのフィールドの組み合わせでグループ化し、各グループの合計で並べ替え、複数の注釈django

    3. 次のシナリオでdb関係(pk / fk)を維持する方法はありますか?

    4. CakePHP 3-LocalStringFormatで日付を解析して、SQL形式を修正し、検証を修正します