使用触发器修改现有记录中的值

时间:2014-11-26 02:54:16

标签: mysql

我有一个包含以下数据的MySQL表

id INT
time_stamp timestamp
status INT

插入时,time_stamp属性将始终为current_timestamp,一旦当前时间戳超过表中插入值的48小时,我需要将状态更改为0。

我创建了以下触发器:

DELIMITER $$
CREATE TRIGGER new_table_AINS 
BEFORE INSERT ON new_table
FOR EACH ROW begin
DECLARE now_value timestamp;
SET @now_value = current_timestamp;
UPDATE new_table SET new.status = 0 where @now_value = new.time_stamp + interval 48 hour;
END$$

但是当我尝试插入一个新行时,我在MySQL中得到错误代码1442

  

错误代码:1442。无法更新表格' new_table'在存储   函数/触发器,因为它已被调用的语句使用   这个存储的函数/触发器。请帮帮我。

非常感谢!

1 个答案:

答案 0 :(得分:1)

在"之前"触发器,您无法重新修改您正在触发的表。但是,我认为你不需要触发器。相反,请使用视图:

create view v_ new_table_AINS as
    select . . .,
           (case when current_timestamp >= time_stamp + interval 48 hour then 0
                 else status
            end)
    from new_table_AINS;

闲暇时,您可以运行一个将旧状态更新为零的作业。