我在使用 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