我想创建一个触发器,将订单中所有产品的总和插入到付款中,但我面临语法错误。这是我到目前为止所写的内容:
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行
答案 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_products
有id
字段,那么&#34;其中&#34;条件可能导致意外结果;充其量它仍然会使阅读变得不必要。