每行分别发生的事件

时间:2013-02-02 14:36:59

标签: mysql

我想为表创建一个事件: -

ACCOUNTS(id char(5),balance decimal(10,2), date_created date)

DATE_CREATED列的值始终为= NOW(),即表格中插入行的日期

根据DATE_CREATED列,我希望每行的余额在每31天后增加2%,即每行(DATE_CREATED+31 Days之后)

我想知道它是否可能,如果有可能那么它的代码是什么?

2 个答案:

答案 0 :(得分:3)

您需要撰写使用UPDATEDATEDIFF

MOD语句

尝试类似:

UPDATE Accounts 
SET Balance = Balance * 1.02 
WHERE DATEDIFF(now(),date_created) MOD 31 = 0;

这是SQL Fiddle

您可以安排此操作每天运行。这可能是你最好的方法。

祝你好运。

答案 1 :(得分:2)

这将每天运行,但根据where clause,它会更新表格。

CREATE EVENT `myEvent`
ON SCHEDULE AT CURRENT_TIMESTAMP
DO BEGIN
    -- update balance by 2%
    UPDATE yourtable
    SET balance = balance * 1.02
    WHERE DateDiff(CurDate(), created_date) MOD 31 = 0
END;

如果您正在寻找从今天起有31天间隔Created_Date的更新数据,那么Where clause

WHERE Date_Format(Date_Add(CurDate(), interval 31 day),'%Y-%m-%d') = Date_Format(CurDate(),'%Y-%m-%d')

WHERE DateDiff(CurDate(), created_date) = 31