1

project以下列fundgoal.

这是我提出的查询:

  CREATE TRIGGER percentcalc AFTER UPDATE ON project 
  FOR EACH ROW 
    SET percent = ( fund / goal ) *100

但我似乎得到了一个错误:

#1193 - 未知系统变量“百分比”

4

2 回答 2

1
delimiter //
CREATE TRIGGER percentcalc AFTER UPDATE ON project 
FOR EACH ROW BEGIN
    SET NEW.percent = ( NEW.fund / NEW.goal ) * 100;
END
//
delimiter ;
于 2013-07-12T14:20:31.573 回答
1

有两个主要问题:

  1. 您必须使用NEW关键字来访问正在更新的行的列的值
  2. 您不能更改触发器中NEW变量的值。AFTER如果您尝试这样做,您将收到“触发器后不允许更新新行”错误。因此,您必须仅使用BEFORE事件作为触发器

触发器语法和示例
...在触发器主体中, 受触发器影响的行中的列。(OLD 和 NEW 不区分大小写。)...

...在BEFORE 触发器中,如果您具有 UPDATE 权限,您还可以使用 SET NEW.col_name = value 更改其值。这意味着您可以使用触发器来修改要插入新行或用于更新行的值。(这样的 SET 语句在 AFTER 触发器中无效,因为行更改已经发生。)...

话虽如此,您的触发器应该看起来像

CREATE TRIGGER percentcalc 
BEFORE UPDATE ON project 
FOR EACH ROW 
   SET NEW.percent = (NEW.fund / NEW.goal) * 100;

这是SQLFiddle演示

于 2013-07-12T15:40:57.510 回答