【问题标题】:MySQL after update, update datetime column of same tableMySQL更新后,更新同一张表的日期时间列
【发布时间】:2016-04-09 08:14:02
【问题描述】:

我有一个名为teamMembers的表,该表存储了一个人的姓名和电子邮件地址:

id       INT (UNIQUE, AUTOINCREMENT)
name     VARCHAR(255)
email    VARCHAR(255)
updated  DATETIME
created  TIMESTAMP

我使用phpMyAdmin 创建了我的触发器,它在这个导出中看起来像这样:

CREATE TRIGGER teamMembers.updated_updater 
AFTER UPDATE ON teamMembers
    FOR EACH ROW 
        BEGIN
            UPDATE teamMembers SET updated = NOW() WHERE id = OLD.id;
        END

所以当我使用这样的查询时: UPDATE teamMembers SET name = 'test' WHERE id = 1 我应该将更新的列设置为当前日期时间。

这不起作用,我收到以下错误消息:

#1442 - 无法更新存储函数/触发器中的表“teamMembers”,因为它已被调用此存储的语句使用 函数/触发器。

我真的不知道这里有什么问题。我认为这是因为这个触发器也会调用自己,因此会变成一个无限循环。 我认为必须有一种方法可以在不更改查询的情况下自动更新刚刚更新的记录。

有人可以帮我使用 MySQL 触发器更新到 updated 列吗?

【问题讨论】:

    标签: mysql triggers mysql-error-1442


    【解决方案1】:

    使用before 触发器:

    CREATE TRIGGER teamMembers.updated_updater 
    BEFORE UPDATE ON teamMembers
        FOR EACH ROW 
    BEGIN
        SET new.updated = NOW();
    END
    

    【讨论】:

    • 为什么这适用于BEFORE UPDATE 而不是AFTER UPDATE
    • @FIA2008 。 . .因为您无法在触发器中更新同一个表。但是,您可以修改新数据进入表格之前。
    • 感谢您的解释!