MySQL触发器根据计算在新行中设置字段

时间:2013-12-25 11:45:19

标签: mysql

我有一张桌子,f_gas

  • id - int,auto inc
  • date - 日期
  • volume - int
  • kwh - int

kwh是根据volume和其他一些变量计算出来的,我稍后将这些变量放入另一个表中。因此,当我插入一个带有抄表(日期和体积)的新行时,我希望它能够运行计算以确定实际的能量使用量(kwh)。

(这一切都是因为我的能源供应商在使用数据方面绝对没有给我任何信息!)

CREATE TRIGGER gas_kwh
 BEFORE INSERT ON f_gas 
 FOR EACH ROW BEGIN
     SET NEW.kwh = (NEW.volume * 2.83 * 39.5 * 1.02264 / 3.6)
 END;

我也试过了:

CREATE TRIGGER gas_kwh 
 BEFORE INSERT ON f_gas 
 FOR EACH ROW BEGIN
  SET NEW.kwh = (NEW.volume * 2.83 * 39.5 * 1.02264 / 3.6);
 END;

两者都是语法错误,我不确定为什么(错误控制台非特定于语法错误所在的位置)。我也尝试在反引号中逃避字段名称无济于事。我并不是MySQL的新手,但我对触发器不熟悉。我哪里错了?

1 个答案:

答案 0 :(得分:2)

触发器的语法是正确的。 MySQL客户端可能无法解析语句。您需要使用DELIMITER命令,例如:

DELIMITER $$

CREATE TRIGGER gas_kwh
BEFORE INSERT
ON f_gas
FOR EACH ROW
BEGIN
  SET NEW.kwh = (NEW.volume * 2.83 * 39.5 * 1.02264 / 3.6);
END
$$

DELIMITER ;

关于DELIMITER的文章 - What is the DELIMITER in MySQL and what it’s used for

另外,对于你的触发器,你可以这样做 -

CREATE TRIGGER gas_kwh
BEFORE INSERT
ON f_gas
FOR EACH ROW
SET NEW.kwh = (NEW.volume * 2.83 * 39.5 * 1.02264 / 3.6);