我在使用 sql 创建触发器的代码中存在语法错误。我使用 mysql 版本 14.14
I have a syntax error in my code for creating a trigger using sql. I use mysql version 14.14
大家好,我的触发器中有一个语法错误,我不知道为什么!我在一家销售公司的数据库中有 3 个 table,即 ORDERS、SALESREPS 和 PRODUCTS。每当下订单时,我都必须将该订单添加到 ORDERS table。订单成本添加到 SALESREPS table 中的 SALES 列。请注意,销售代表是销售产品的 table 人,销售列存储各个销售人员的销售总额。此外,table PRODUCTS(这是一个包含所有产品及其详细信息的列表的 table)包含一列 'quantity in hand'。所以当下订单时,我必须从下订单之前的可用数量中减少订单数量。
我收到语法错误
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON ORDERS AFTER INSERT AS
UPDATE SALESREPS
SET SALES=SALES+INSERTED.AMOUNT' at line 2
这是我的触发器代码:
CREATE TRIGGER test_trigger
ON ORDERS AFTER INSERT AS
UPDATE SALESREPS
SET SALES=SALES+INSERTED.AMOUNT
FROM SALESREPS,INSERTED
WHERE SALESREPS.EMPL_NUM=INSERTED.REP;
UPDATE PRODUCTS
SET QTY_ON_HAND=QTY_IN_HAND - INSERTED.QTY
FROM PRODUCTS,INSERTED
WHERE PRODUCTS.MFR_ID=INSERTED.MFR
AND PRODUCTS.PRODUCT_ID=INSERTED.PRODUCT;
此外,由于我是根据插入的元组更新 table,我该如何引用插入的元组??
你这里有多个 syntax
问题,但我认为这就是你需要的
DELIMITER $$
CREATE TRIGGER test_trigger
AFTER INSERT ON ORDERS
FOR EACH ROW BEGIN
UPDATE SALESREPS
SET SALES=SALES+NEW.AMOUNT
WHERE SALESREPS.EMPL_NUM=NEW.REP;
UPDATE PRODUCTS
SET QTY_ON_HAND= (QTY_IN_HAND - NEW.QTY)
WHERE PRODUCTS.MFR_ID=NEW.MFR_ID
AND PRODUCTS.PRODUCT_ID=NEW.PRODUCT;
END;$$
DELIMITER ;
你的第一个问题是这一行:
ON ORDERS AFTER INSERT AS
哪个是还原的,需要
AFTER INSERT ON ORDERS
请注意,我删除了 AS
。
您还错过了 FOR EACH ROW BEGIN/END
请注意,一开始我将分隔符指定为 $$
,以便编译器知道何时停止。
此外,update
语句不能有 from
子句,因为您已经在第一个语句中指定要更新的 table
。
UPDATE SALESREPS
下一个问题是当您尝试引用新值时,要访问的指定关键字就像 new
.
一样简单
你的最后一个错误是你的条件where products.mfr_id = new.mfr
你可能只是在这里打错了,你想使用where products.mfr_id = new.mfr_id
大家好,我的触发器中有一个语法错误,我不知道为什么!我在一家销售公司的数据库中有 3 个 table,即 ORDERS、SALESREPS 和 PRODUCTS。每当下订单时,我都必须将该订单添加到 ORDERS table。订单成本添加到 SALESREPS table 中的 SALES 列。请注意,销售代表是销售产品的 table 人,销售列存储各个销售人员的销售总额。此外,table PRODUCTS(这是一个包含所有产品及其详细信息的列表的 table)包含一列 'quantity in hand'。所以当下订单时,我必须从下订单之前的可用数量中减少订单数量。
我收到语法错误
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON ORDERS AFTER INSERT AS UPDATE SALESREPS SET SALES=SALES+INSERTED.AMOUNT' at line 2
这是我的触发器代码:
CREATE TRIGGER test_trigger
ON ORDERS AFTER INSERT AS
UPDATE SALESREPS
SET SALES=SALES+INSERTED.AMOUNT
FROM SALESREPS,INSERTED
WHERE SALESREPS.EMPL_NUM=INSERTED.REP;
UPDATE PRODUCTS
SET QTY_ON_HAND=QTY_IN_HAND - INSERTED.QTY
FROM PRODUCTS,INSERTED
WHERE PRODUCTS.MFR_ID=INSERTED.MFR
AND PRODUCTS.PRODUCT_ID=INSERTED.PRODUCT;
此外,由于我是根据插入的元组更新 table,我该如何引用插入的元组??
你这里有多个 syntax
问题,但我认为这就是你需要的
DELIMITER $$
CREATE TRIGGER test_trigger
AFTER INSERT ON ORDERS
FOR EACH ROW BEGIN
UPDATE SALESREPS
SET SALES=SALES+NEW.AMOUNT
WHERE SALESREPS.EMPL_NUM=NEW.REP;
UPDATE PRODUCTS
SET QTY_ON_HAND= (QTY_IN_HAND - NEW.QTY)
WHERE PRODUCTS.MFR_ID=NEW.MFR_ID
AND PRODUCTS.PRODUCT_ID=NEW.PRODUCT;
END;$$
DELIMITER ;
你的第一个问题是这一行:
ON ORDERS AFTER INSERT AS
哪个是还原的,需要
AFTER INSERT ON ORDERS
请注意,我删除了 AS
。
您还错过了 FOR EACH ROW BEGIN/END
请注意,一开始我将分隔符指定为 $$
,以便编译器知道何时停止。
此外,update
语句不能有 from
子句,因为您已经在第一个语句中指定要更新的 table
。
UPDATE SALESREPS
下一个问题是当您尝试引用新值时,要访问的指定关键字就像 new
.
你的最后一个错误是你的条件where products.mfr_id = new.mfr
你可能只是在这里打错了,你想使用where products.mfr_id = new.mfr_id