mysql - 触发语法错误

标签 mysql syntax triggers

Snippet of ER-diagram

我正在尝试创建一个触发器来为“SumBeforeTaxes(from 'order')”提供一个值。

“SumBeforeTaxes”是 itemQuantity(from 'order_item') x 价格 ('from itemsinstock')。

因此,如果某人以每件 10 美元的价格订购了 3 件商品,则“税前总和”将为 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

我可以在这方面获得一点帮助吗?

最佳答案

orderMySQL 中的保留字,因此您需要像下面一样在 INSERT 语句中使用 backtique 对其进行转义。

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;

关于mysql - 触发语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41169615/

相关文章:

mysql - 我可以使用 CGI 显示 MySQL 的输出吗?

java - 如何将地理位置点数据反序列化为Java实体?

python - 用于异常处理的首选 Python 风格

MySQL-在插入替换日期之前创建触发器

Mysql触发器更新如果日期匹配和插入如果不匹配所有之前插入

php - 如何使用 2 个或更多关键字搜索多个列

php - opencart - 想要将产品定价详细信息添加到订单/发票中

mysql - 为什么mysql中没有rename column命令?

javascript - 在这种情况下你能避免重复吗?

sql - 在 oracle 中的 View 上触发