2016-09-18 4 views
0

カラムがcreateおよびactualのデータベーステーブルがあります。そして、私はcreate列をチェックし、1週間以上経過している場合は、オートマティックの列actualを別の値に設定するためのトリガーなどの解決策が必要です。これどうやってするの?どうもありがとうございました。定義された期間の後にデータベーステーブルの列を設定します

+1

これを達成するために毎日1回実行される 'mysql event scheduler'または' cron'を採用することができます。トリガーはここでは役に立たない – 1000111

答えて

0

ありがとう、私は作成しました。あなたは見ることができます:

CREATE EVENT `archive` ON SCHEDULE EVERY 1 DAY STARTS '2016-09-18 13:34:07' ON COMPLETION NOT PRESERVE ENABLE COMMENT 'set actual' DO update results set actual = 4 where DATEDIFF(curdate(), created) >= 7; 
1

この種の問題に対する最善のアプローチは、データベース内のデータを変更するないです。代わりに、ビューを使用して実際の値を正しく計算してください。

create view v_table as 
    select t.*, 
      (case when datediff(curdate(), created) >= 7 then 4 
       else old_actual 
      end) as actual 
    from table t; 

ビューから値にアクセスできます。

イベントを1行に1回実行する必要がある場合は、スケジュールを設定すると問題はありません。しかし、ビジー状態のデータベースで終わると、スケジュールされたイベントが数多く発生し、すべての処理が遅くなります。

関連する問題