【问题标题】:MySQL ON UPDATE trigger - update the same table with CURRENT_TIMESTAMP and conditionMySQL ON UPDATE 触发器 - 使用 CURRENT_TIMESTAMP 和条件更新同一个表
【发布时间】:2014-02-11 18:20:10
【问题描述】:


我有一个带有 TIMESTAMP 字段“close_time”的 MySQL(5.1.67) 表“tracker”。
在同一张表中,我有字符串字段“status”。
status 字段更新为特定文本值(例如“Closed”)时,我想用 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 行。

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

【问题讨论】:

    标签: mysql triggers timestamp conditional-statements


    【解决方案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
    

    【讨论】:

    • 什么意思?我想在 UPDATE 事件上创建触发器。这是一个带有“更新前”和“新”的示例:dev.mysql.com/doc/refman/5.0/en/trigger-syntax.html
    • 我的错,我错过了。在更新工作之前,但之后也会。我认为您的更新声明是错误的。我将编辑我的答案
    • 您需要更改分隔符。将此行添加到脚本的顶部:delimiter// 最后一行将是 end//
    【解决方案2】:

    你设置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 ;     
    

    【讨论】:

      猜你喜欢
      • 2011-07-31
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      • 2019-01-29
      • 2012-01-01
      • 1970-01-01
      相关资源
      最近更新 更多