【发布时间】:2019-03-13 20:22:20
【问题描述】:
您好,是否可以将行插入到具有到期日期的表中,并在达到到期日期时自动删除行?或者我只需要创建一个带有到期日期的列,并且在排序时检查这个值是否忽略?
【问题讨论】:
您好,是否可以将行插入到具有到期日期的表中,并在达到到期日期时自动删除行?或者我只需要创建一个带有到期日期的列,并且在排序时检查这个值是否忽略?
【问题讨论】:
您不能直接在数据库中执行此操作。您可以通过安排执行删除的事件或作业来做到这一点。您可以为每次删除安排一个事件。
不过,我认为更好的方法是使用视图:
create view v_t as
select t.*
from t
where expiration_date > now();
这可确保在到期日期不再是未来的那一刻,该行不可用。然后,您可以在闲暇时删除这些行。删除行会给数据库带来负担,因此您可能希望等到负载较轻。
【讨论】:
您的需求看起来更像是一个事件 如果您不想添加到期日期列而不是
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;
【讨论】: