MySQL 更新后,更新同一个表的日期时间列

3 mysql triggers mysql-error-1442

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

id       INT (UNIQUE, AUTOINCREMENT)
name     VARCHAR(255)
email    VARCHAR(255)
updated  DATETIME
created  TIMESTAMP
Run Code Online (Sandbox Code Playgroud)

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

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

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

但这不起作用,我收到此错误消息:

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

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

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

Gor*_*off 6

使用before触发器:

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

  • @国际汽联2008。. . 因为您不能在触发器中更新同一个表。但是,您可以*修改*新数据*之前*它进入表。 (6认同)