kmo*_*y12 11 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);
Run Code Online (Sandbox Code Playgroud)
并收到此错误:
MySQL said: #1362 - Updating of NEW row is not allowed in after trigger
Run Code Online (Sandbox Code Playgroud)
我也试过使用OLD但也出错了.我可以在之前做,但如果我添加了100次点击,它会使用之前的#次点击触发(对吗?)
我该怎么做才能做到这一点?
编辑 - 将在此上运行的查询示例:
UPDATE records SET clicks=clicks+100
//EPC should update automatically
Run Code Online (Sandbox Code Playgroud)
Gor*_*off 13
您无法在更新后触发器中更新表中的行.
也许你想要这样的东西:
CREATE TRIGGER `records_integrity` BEFORE UPDATE
ON `records`
FOR EACH ROW
SET NEW.epc=IFNULL(new.earnings/new.clicks, 0);
Run Code Online (Sandbox Code Playgroud)
编辑:
在触发器内,您可以访问OLD和NEW. OLD是记录中的旧值,NEW是新值.在before触发器中,NEW值是写入表的值,因此您可以修改它们.在后触发器中,NEW值已经写入,因此无法修改它们.我认为MySQL文档很好地解释了这一点.