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',因为它已被调用此存储函数/触发器的语句使用.
对,错误意味着您无法修改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语句中动态计算.
| 归档时间: |
|
| 查看次数: |
6356 次 |
| 最近记录: |