SQL:使用触发器或类似方法将过期数据从一个表移动到另一个表

时间:2013-12-18 14:16:01

标签: mysql

好吧还是菜鸟 我有一个表添加了一个日期列(date_added)和一个过期期间列(expire_period)。 添加的日期是记录添加的日期,过期时间列是记录过期的天数,从1天到180天不等。

我想要的是MySQL服务器上的一些自动化(触发器),一旦达到到期日期,就将过期的行移动到另一个类似的表。

我已经能够获得已过期的记录:

SELECT * FROM `dk`.`claims` WHERE date_add(`date_added`, interval `expire_period` day) < date(now());

如何使用它将数据自动移动到新表claim_expired。

2 个答案:

答案 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 Schedulerbasic syntax是:

CREATE EVENT event_name
ON SCHEDULE period
DO BEGIN
...
END

在您的情况下,您可以将查询放在DO-BEGIN-END块中。