mysql - 在触发器中更新后更新同一行

标签 mysql sql triggers

我希望 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);

编辑:

在触发器中,您可以访问 OLDNEWOLD 是记录中的旧值,NEW 是新值。在 before 触发器中,NEW 值是写入表的内容,因此您可以修改它们。在 after 触发器中,NEW 值已被写入,因此无法修改。我认为 MySQL documentation很好地解释了这一点。

关于mysql - 在触发器中更新后更新同一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17823457/

相关文章:

SQL 日期时间数学

sql - 如何使用 group by 子句在 2 个不同的表列之间进行乘法运算?

MySQL 触发器 : is it possible to delete rows if table become too large?

mysql - 错误代码 : 1648. 条件项 'MESSAGE_TEXT' 的数据太长

mysql - 如何使用加密密码连接mysql?

mysql - 我无法再连接到 mysql 3307 端口

php - pdo 使用通配符准备语句

android - 将android应用程序连接到xampp

PHP预订系统数据库

database - 触发器调用存储过程