【问题标题】:How to create a MySQL trigger to update a datetime column if another column value changes?如果另一列值发生更改,如何创建 MySQL 触发器以更新日期时间列?
【发布时间】:2014-01-31 15:11:48
【问题描述】:

我在表格中有一个名为“purged_on”的列,它是一个日期时间类型。我还有另一个名为“status”的列,该列的值可以是 0-9

我需要添加一个触发器,该触发器将使用更新的状态记录值的日期时间值更新“purge_on”列,从任何状态更改为 0。但如果记录从状态 0 更改为其他任何值,那么我想要删除该记录的 purged_on 值。

我从来没有使用过触发器,所以我不确定从哪里开始,或者这是否可行。

我尝试了以下方法,但出现语法错误 创建触发器 update_purge_date 更新后 ON phone_calls FOR EACH ROW purged_on = CASE WHEN status = 0 THEN NOW() ELSE NULL END;

谢谢

【问题讨论】:

    标签: mysql triggers


    【解决方案1】:

    给你。希望这可以帮助。将content 替换为您的表名。

    CREATE TRIGGER myPurgedOnTrigger BEFORE UPDATE ON content FOR EACH ROW
    BEGIN
        IF (NEW.status = 0 and NEW.status <> OLD.status) THEN
            SET NEW.purged_on = current_timestamp();
        END IF;
        IF (NEW.status != 0 and NEW.status <> OLD.status) THEN
            SET NEW.purged_on = null;
        END IF;
    END;
    

    注意:这是之前的更新,而不是之后的更新。这是因为您需要执行 SET 命令。如果您将其更改为 AFTER 然后尝试创建触发器,您将收到此错误:“触发器后不允许更新新行”。

    【讨论】:

    • 您更改了问题,正在更新答案...答案已更新。这个对我有用。我测试过了。
    • 我的问题还是一样,但我添加了我尝试过的内容。使用您提供的代码仍然会出现语法错误
    • 用你的表名替换content。如果这不能解决问题,请告诉我错误内容。
    • 我这样做了,但没有奏效。我需要更改“NEW”和OLD吗?
    • 没有。错误说什么?您是否在尝试重新创建触发器之前放弃了它?执行drop trigger myPurgedOnTrigger; 然后运行我的代码。
    猜你喜欢
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 2019-09-08
    • 2021-06-02
    • 2017-11-08
    相关资源
    最近更新 更多