触发语法错误

时间:2016-12-15 17:03:31

标签: mysql syntax triggers

Snippet of ER-diagram

我正在尝试创建一个触发器,将“SumBeforeTaxes(来自'order')”赋予一个值。

“SumBeforeTaxes”是itemQuantity(来自'order_item')x price('from itemsinstock')。

因此,如果一个人订购了3件物品,每件10美元,那么“SumBeforeTaxes”将是3 x 10(总共30件)。同样,如果一个人订购了3件物品,每件10美元,2件物品各15件,那么“SumBeforeTaxes”应该是3x10 + 2x15(总共60件)。

这是我到目前为止所尝试的内容 - 但我不断收到语法错误。我也不确定我的触发器(尽管语法错误)是正确的。

第一次尝试:

CREATE DEFINER = CURRENT_USER TRIGGER `orderdb`.`order_AFTER_INSERT`
AFTER INSERT ON `order_item` FOR EACH ROW

BEGIN

SET getItemPrice = (SELECT Price FROM itemsinstock);

INSERT orderdb.'order'
SET SumBeforeTax = itemQuantity * getItemPrice;

END

第二次尝试:

CREATE DEFINER = CURRENT_USER TRIGGER `orderdb`.`order_AFTER_INSERT`
AFTER INSERT ON `order_item` FOR EACH ROW

BEGIN


SET getItemPrice = (SELECT Price FROM itemsinstock);

INSERT INTO orderdb.'order' (SumBeforeTax) VALUES (new.itemQuantity * getItemPrice);

END

第三次尝试:

CREATE DEFINER = CURRENT_USER TRIGGER `orderdb`.`order_AFTER_INSERT` 
AFTER INSERT ON `order_item` FOR EACH ROW
BEGIN

declare getItemPrice DOUBLE;

SET getItemPrice = (SELECT Price FROM itemsinstock WHERE ItemID = new.itemID);

INSERT INTO orderdb.'order'(SumBeforeTax) VALUES (itemQuantity * getItemPrice);

END

我能在这个上得到一点帮助吗?

1 个答案:

答案 0 :(得分:1)

orderMySQL中的保留字,因此您需要使用backtique为INSERT语句转义它。

INSERT INTO orderdb.`order`(SumBeforeTax) VALUES (itemQuantity * getItemPrice);

对于任何语法澄清,请参考Documentation On CREATE TRIGGER Syntax

在这种情况下,您可能希望使用UPDATE语句更改代码,而不是:

BEGIN
declare getItemPrice DOUBLE;

SELECT Price INTO getItemPrice FROM itemsinstock WHERE ItemID = new.itemID;

UPDATE orderdb.`order` SET SumBeforeTax = new.itemQuantity * getItemPrice
WHERE OrderID = 101;