挣扎于MySQL触发器

时间:2018-03-06 18:10:42

标签: mysql triggers phpmyadmin

我想创建一个触发器,将订单中所有产品的总和插入到付款中,但我面临语法错误。这是我到目前为止所写的内容:

CREATE TRIGGER set_total BEFORE INSERT on payments 
FOR EACH ROW 
BEGIN

DECLARE id INT(10);

DECLARE temp INT(10);

SET id:=new.Order;

SELECT SUM(Price) into temp

FROM products , order_products

WHERE order_products.Order LIKE id AND products.Products_ID=order_products.Products;

SET new.Total:=temp;

END;

我无法弄清楚语法错误,请帮助。

编辑:#1064 - 您的SQL语法出错;查看与您的MySQL服务器版本相对应的手册,以获得在''附近使用的正确语法。在第2行

1 个答案:

答案 0 :(得分:1)

在多语句触发器,程序等中......你需要暂时覆盖分隔符,因此MySQL不认为它运行的第一个;正在结束触发器/过程/等... < / p>

DELIMITER $$

CREATE TRIGGER set_total BEFORE INSERT on payments 
FOR EACH ROW 
BEGIN

DECLARE id INT(10);
DECLARE temp INT(10);

SET id:=new.Order;

SELECT SUM(Price) into temp
FROM products , order_products
WHERE order_products.Order LIKE id AND products.Products_ID=order_products.Products;

SET new.Total:=temp;

END$$

DELIMITER ;

旁注:这通常被认为是用于计算总和的更好的查询形式:

SELECT SUM(Price) into temp
FROM products
INNER JOIN order_products ON products.Products_ID=order_products.Products
WHERE order_products.Order = id;

另外:小心声明可能被模糊地解释为字段名称的变量名称;如果products和/或order_productsid字段,那么&#34;其中&#34;条件可能导致意外结果;充其量它仍然会使阅读变得不必要。