admin

触发器中UPDATE之后更新同一行

sql

我希望该epc列始终为earnings/ clicks。我正在使用AFTER
UPDATE触发器来完成此操作。因此,如果要向该表中添加100次点击,我希望EPC自动更新。

我正在尝试:

CREATE TRIGGER `records_integrity` AFTER UPDATE ON `records` FOR EACH ROW SET 
NEW.epc=IFNULL(earnings/clicks,0);

并得到此错误:

MySQL said: #1362 - Updating of NEW row is not allowed in after trigger

我也尝试使用OLD,但也出现了错误。我可以在此之前做,但是如果我添加了100次点击,它将使用之前的#次点击作为触发条件(对吗?)

我应该怎么做才能做到这一点?

编辑-将在此运行查询的示例:

UPDATE records SET clicks=clicks+100
//EPC should update automatically

阅读 180

收藏
2021-05-10

共1个答案

admin

您无法 更新 触发器中更新表中的行。

也许您想要这样的事情:

CREATE TRIGGER `records_integrity` BEFORE UPDATE
ON `records`
FOR EACH ROW
    SET NEW.epc=IFNULL(new.earnings/new.clicks, 0);

编辑:

在触发器内,您可以访问OLDNEWOLD是记录中的旧值,NEW也是新值。在 before
触发器中,这些NEW值是写入表的内容,因此您可以对其进行修改。在 之后的
触发器中,NEW值已被写入,因此无法对其进行修改。我认为MySQL文档很好地解释了这一点。

2021-05-10