我希望 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
最佳答案
您不能在 after 更新触发器中更新表中的行。
也许你想要这样的东西:
CREATE TRIGGER `records_integrity` BEFORE UPDATE
ON `records`
FOR EACH ROW
SET NEW.epc=IFNULL(new.earnings/new.clicks, 0);
编辑:
在触发器中,您可以访问 OLD
和 NEW
。 OLD
是记录中的旧值,NEW
是新值。在 before 触发器中,NEW
值是写入表的内容,因此您可以修改它们。在 after 触发器中,NEW
值已被写入,因此无法修改。我认为 MySQL documentation很好地解释了这一点。
关于mysql - 在触发器中更新后更新同一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17823457/