好吧还是菜鸟 我有一个表添加了一个日期列(date_added)和一个过期期间列(expire_period)。 添加的日期是记录添加的日期,过期时间列是记录过期的天数,从1天到180天不等。
我想要的是MySQL服务器上的一些自动化(触发器),一旦达到到期日期,就将过期的行移动到另一个类似的表。
我已经能够获得已过期的记录:
SELECT * FROM `dk`.`claims` WHERE date_add(`date_added`, interval `expire_period` day) < date(now());
如何使用它将数据自动移动到新表claim_expired。
答案 0 :(得分:2)
不要使用触发器,因为触发器会在每次修改时触发,并且您不希望每次修改数据时都运行此作业。
相反,根据语句中的WHERE
子句,使用event scheduler每天运行一个作业:
CREATE EVENT archive_claims
ON SCHEDULE EVERY 1 DAY
COMMENT 'archives claims older than their expiry date'
DO
BEGIN
INSERT INTO old_claims SELECT * FROM dk.claims WHERE ....
DELETE FROM dk.claims WHERE ....
END
如果它每天只运行一次(因为你的到期逻辑中没有更精细的时间分辨率),那么每次运行修改时都不会有大幅降低性能。
答案 1 :(得分:0)
您正在寻找Event Scheduler。 basic syntax是:
CREATE EVENT event_name
ON SCHEDULE period
DO BEGIN
...
END
在您的情况下,您可以将查询放在DO-BEGIN-END块中。