mySQL触发器无法更新调用触发器的语句已在使用的表

时间:2011-12-02 01:24:55

标签: mysql sql phpmyadmin

在创建下面的任何一个触发器之后,当我尝试进行更新时,我得到错误(在代码后面详细说明)。无论我走哪条路,我似乎无法更新表格。我是否必须创建一个新表并在其中放置一个列以进行更新,或者有解决方法吗? 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',因为它已被调用此存储函数/触发器的语句使用。

1 个答案:

答案 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