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

Sim*_*ver 1 mysql sql phpmyadmin

在创建下面的任何一个触发器之后,当我尝试进行更新时,我得到错误(在代码之后详细说明).无论我走哪条路,我似乎无法更新表格.我是否必须创建一个新表并在其中放置一个列以进行更新,或者有解决方法吗?该页面说:"在存储的函数或触发器中,不允许通过调用函数或触发器的语句修改已经被使用(用于读取或写入)的表." 但那么NEW和OLD关键字有什么意义呢?我只是错误地使用它们吗?

表:画廊

列:重量,修饰符,等级

trigger:updateRating

CREATE TRIGGER updateRating
BEFORE UPDATE ON gallery
FOR EACH ROW
UPDATE gallery SET rating= sum(NEW.weight * NEW.modifier)
Run Code Online (Sandbox Code Playgroud)

要么

CREATE TRIGGER updateRating
AFTER UPDATE ON gallery
FOR EACH ROW
UPDATE gallery SET rating= sum(weight * modifier)
Run Code Online (Sandbox Code Playgroud)

SQL查询:编辑

UPDATE`acs``gallery` SET`weight` ='6'Where`callery` .id` = 1 LIMIT 1

MySQL说:文档

#1442 - 无法更新存储函数/触发器中的表'gallery',因为它已被调用此存储函数/触发器的语句使用.

Dev*_*art 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
Run Code Online (Sandbox Code Playgroud)

最后,让我问一个问题.你为什么要用触发器修改rating?我想说你可以rating在SELECT语句中动态计算.