MySQL触发器在后续查询中没有识别NEW.entity?

时间:2018-05-31 05:10:26

标签: mysql triggers

我在桌面上设置了触发器" purchase_invoice'这应该为" purchase_stock'中的发票项目添加相应的股票交易。在' stock'中更新其库存单位并进行更新。表:

CREATE TRIGGER addStock AFTER INSERT ON purchase_invoice
FOR EACH ROW

    INSERT INTO 
    purchase_stock
    (
       purchase_invoice_id,
       item_id,
       units,
       ...
    )
    VALUES
    (
       NEW.id,
       NEW.item_id,
       NEW.units
       ...
    );

    UPDATE 
       stock 
    SET 
       units = units + NEW.units 
    WHERE 
       item_id = NEW.item_id;
...

但我收到以下错误:

Unknown column 'NEW.units'   in field list
Unknown column 'NEW.item_id' in 'where clause' 

1 个答案:

答案 0 :(得分:0)

BEGIN之后没有FOR EACH ROW,因此mysql解释只使用单个insert语句定义触发器并分别考虑update语句。这就是您收到错误消息的原因。显然,您也错过了相应的END

正确的代码如下所示:

DELIMITER \\
CREATE TRIGGER addStock AFTER INSERT ON purchase_invoice
FOR EACH ROW
BEGIN
    INSERT INTO 
    purchase_stock
    (
       purchase_invoice_id,
       item_id,
       units,
       ...
    )
    VALUES
    (
       NEW.id,
       NEW.item_id,
       NEW.units
       ...
    );
    UPDATE 
       stock 
    SET 
       units = units + NEW.units 
    WHERE 
       item_id = NEW.item_id;
    ...
END\\

DELIMITER ;