【问题标题】:MYSQL: Create row in table with expiration dateMYSQL:在表中创建具有到期日期的行
【发布时间】:2019-03-13 20:22:20
【问题描述】:

您好,是否可以将行插入到具有到期日期的表中,并在达到到期日期时自动删除行?或者我只需要创建一个带有到期日期的列,并且在排序时检查这个值是否忽略?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您不能直接在数据库中执行此操作。您可以通过安排执行删除的事件或作业来做到这一点。您可以为每次删除安排一个事件。

    不过,我认为更好的方法是使用视图:

    create view v_t as
        select t.*
        from t
        where expiration_date > now();
    

    这可确保在到期日期不再是未来的那一刻,该行不可用。然后,您可以在闲暇时删除这些行。删除行会给数据库带来负担,因此您可能希望等到负载较轻。

    【讨论】:

      【解决方案2】:

      您的需求看起来更像是一个事件 如果您不想添加到期日期列而不是

      CREATE EVENT delete_event ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY
      ON COMPLETION PRESERVE
      DO BEGIN
            DELETE FROM Your_table  WHERE date>= logic for expiration_date   ;
      END;
      

      否则

      DELIMITER $$
      CREATE EVENT Delete ON SCHEDULE EVERY 1 DAY
      DO
      BEGIN
        DELETE   FROM TABLE  WHERE `date_expires` < CURRENT_TIMESTAMP();
      END$$
      DELIMITER 
      

      ;

      注意需要在您的服务器上启用 MySQL 事件调度程序:

      SET GLOBAL event_scheduler = ON;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-09
        • 1970-01-01
        • 2019-10-03
        相关资源
        最近更新 更多