MySQL ON UPDATE触发器 - 使用CURRENT_TIMESTAMP和condition更新相同的表

时间:2014-01-21 22:20:56

标签: mysql triggers timestamp conditional-statements


我有一个MySQL(5.1.67)表'跟踪器',其中TIMESTAMP字段为“ close_time ”。
在同一个表格中,我有字符串字段' status ' 当状态字段更新为特定文本值时,我希望使用CURRENT_TIMESTAMP值更新 close_time 字段,例如“已关闭”。

以下是INSERT的示例: How can I write a trigger that updates rows in the same table, before the insert is commited?

我尝试过类似的东西:

CREATE TRIGGER `close_time_trigger` BEFORE UPDATE ON `tracker` FOR EACH ROW
      BEGIN
     IF NEW.status = 'Closed' THEN
     SET NEW.close_time = CURRENT_TIMESTAMP;     
     END IF;
     END

但是我收到了错误:你的SQL语法错误了......在第4行。

我尝试了一些其他的变化,但我发现它们都不起作用。 请帮助为我的案例创建正确的触发器。

2 个答案:

答案 0 :(得分:0)

您是否设置了DELIMITER

这应该有效:

DELIMITER $$

CREATE TRIGGER `close_time_trigger` BEFORE UPDATE ON `tracker` FOR EACH ROW
      BEGIN
     IF NEW.status = 'Closed' THEN
     SET NEW.close_time = CURRENT_TIMESTAMP;     
     END IF;
     END $$

DELIMITER ;     

答案 1 :(得分:-1)

你没有告诉它要更新什么。

CREATE TRIGGER `close_time_trigger` BEFORE UPDATE ON `tracker` FOR EACH ROW
      BEGIN
     IF NEW.status = 'Closed' THEN
       update tracker 
         SET NEW.close_time = CURRENT_TIMESTAMP;
     END IF;
   END