0

毎月の初めにテーブルにデータを挿入したいのですが、mysqlイベントを使用します。しかし、誰かが私に、そのイベントを見逃した場合 (サーバーがスケジュールされた日付/時刻にダウンした場合、mysql はオンラインになった後にそのイベントを再実行しないことを意味します)、mysql はそれを再実行しないと言いました。

event_balanceそのため、イベントがログに記録されるセル化されたテーブルを作成しました。次に、毎時間実行されるというイベントを作成し、balance_update_check今月のイベントが実行されたかどうかを確認します。そうでない場合は、今月の行を作成し、テーブルを更新するプロシージャを 呼び出しevent_balanceます。event_typedate

しかし、私はこれに満足していません。コードを確認して、大丈夫ですか? 可能であれば、より良い解決策を提供してください。ありがとうございました。

イベント balance_update_check

CREATE
    EVENT `balance_update_check`
    ON SCHEDULE EVERY 1 Hour
    DO BEGIN
        set @check_if_cont_doc:= (SELECT count(*) FROM event_balance WHERE event_type = 'doctor_contract' and monthname(event_balance.date) = monthname(CURDATE()));        

        set @check_if_cont_other:= (SELECT count(*) FROM event_balance WHERE event_type = 'other_contract' and monthname(event_balance.date) = monthname(CURDATE()));

        IF (@check_if_cont_doc = 0) Then
            call proc_leave_bal_doc_cont();
            Insert into event_balance (event_type,`date`) values('doctor_contract',CURDATE())       
        END IF;     

        IF (@check_if_cont_other = 0) Then
            call proc_leave_bal_other_cont();
            Insert into event_balance (event_type,`date`) values('other_contract',CURDATE())        
        END IF;
END //
4

1 に答える 1