在project
以下列fund
和goal
.
这是我提出的查询:
CREATE TRIGGER percentcalc AFTER UPDATE ON project
FOR EACH ROW
SET percent = ( fund / goal ) *100
但我似乎得到了一个错误:
#1193 - 未知系统变量“百分比”
delimiter //
CREATE TRIGGER percentcalc AFTER UPDATE ON project
FOR EACH ROW BEGIN
SET NEW.percent = ( NEW.fund / NEW.goal ) * 100;
END
//
delimiter ;
有两个主要问题:
NEW
关键字来访问正在更新的行的列的值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演示