在创建下面的任何一个触发器之后,当我尝试进行更新时,我得到错误(在代码后面详细说明)。无论我走哪条路,我似乎无法更新表格。我是否必须创建一个新表并在其中放置一个列以进行更新,或者有解决方法吗? This page说:“在存储的函数或触发器中,不允许通过调用函数或触发器的语句修改已经在使用(用于读取或写入)的表。”但那么NEW和OLD关键字有什么意义呢?我只是错误地使用它们吗?
table:gallery
列:重量,修饰符,评级
触发器:updateRating
CREATE TRIGGER updateRating
BEFORE UPDATE ON gallery
FOR EACH ROW
UPDATE gallery SET rating= sum(NEW.weight * NEW.modifier)
或
CREATE TRIGGER updateRating
AFTER UPDATE ON gallery
FOR EACH ROW
UPDATE gallery SET rating= sum(weight * modifier)
SQL查询:编辑
UPDATE`acs``gallery` SET`weight` ='6'Where`callery` .id` = 1 LIMIT 1
MySQL说:文档
#1442 - 无法更新存储函数/触发器中的表'gallery',因为它已被调用此存储函数/触发器的语句使用。
答案 0 :(得分:5)
是的,错误意味着您无法修改gallery
表,因为触发器是使用此表定义的。有一种可能的方法来更新值,它是一个BEFORE UPDATE触发器,这里是一个例子 -
CREATE TRIGGER updateRating
BEFORE UPDATE
ON gallery
FOR EACH ROW
BEGIN
SET NEW.rating= NEW.weight * NEW.modifier; -- You may update a NEW value.
END
最后,让我问一个问题。为什么要使用触发器来修改rating
?我想说你可以在SELECT语句中动态计算rating
。