【问题标题】:Automatically update field according to timestamp根据时间戳自动更新字段
【发布时间】:2014-03-13 18:28:23
【问题描述】:

如果我在mysql中有下表:

Table 1:

id   name   expired       exp_date   
1   Andrew     0      2015-12-09 20:00:00
2    John      1      2013-01-01 20:00:00
3    Mike      0      2017-01-13 21:00:00 

一旦 exp_date 过去,mysql 自动将 'expired' 字段更改为 '1' 的最佳方式是什么?

【问题讨论】:

  • 虽然您可以使用MySQL Scheduled Event 来执行此操作,但我个人建议从触发更新语句的 cron 运行脚本。

标签: mysql database timestamp sql-update


【解决方案1】:

在我写答案时,其他人已经评论并回答了使用 MySQL 事件的建议,但我会举一个例子:

CREATE EVENT expire_table1
  ON SCHEDULE EVERY 1 HOUR 
  DO UPDATE table1 SET expired = 1 WHERE expired = 0 AND exp_date < NOW();

(expired, exp_date) 上建立一个索引以使 UPDATE 仅锁定它需要的行会很有用。

请务必启用事件调度程序。默认情况下它是关闭的,这让很多想要使用它的人感到困惑:

mysql> SET GLOBAL event_scheduler = 1;

在此处阅读文档以获取更多详细信息:http://dev.mysql.com/doc/refman/5.6/en/events.html

【讨论】:

    【解决方案2】:

    您可以使用 mysql 事件,每天运行一次以更新将 exp_date 与当前日期进行比较的表

    https://dev.mysql.com/doc/refman/5.1/en/events.html

    【讨论】:

    • 这里一定有回声。
    猜你喜欢
    • 2020-09-04
    • 2011-08-10
    • 2012-11-14
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    相关资源
    最近更新 更多