我有2个表订单和产品,两个都有一个数量列,其中包含值。我试图使用after触发器从orders表上的quantity列中减去products表上的quantity列。触发器将在订单表上。这是我到目前为止所做的:
delimiter //
Create Trigger OQminusPQ
After Insert ON orders
For Each Row
Begin
Select products.Quantity - orders.Quantity
end
//
delimiter ;
错误:我不允许从触发器返回结果集,所以我该怎么做(已解决)!!!!
更新:
DELIMITER //
CREATE TRIGGER OQminusPQ
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
DECLARE PQMOQ INT;
SELECT products.Quantity - orders.Quantity
INTO PQMOQ
FROM products
WHERE products.ProductID = orders.ProductID;
END //
DELIMITER ;
注意:我已创建了触发器,现在如何显示结果?
答案 0 :(得分:1)
在行触发器中,您通常不能(通常不希望)直接查询触发器附加到的表。 (查看“变异表”问题。)相反,在INSERT
行触发器中,您可以访问名为NEW
的伪记录,其中包含新记录 ,因为它将是触发代码退出后。 。 (在DELETE
行触发器中,您改为使用伪记录OLD
,其中包含触发器触发前的记录,并在UPDATE
行触发您同时拥有OLD
和NEW
。)
请注意,在 BEFORE 触发器中,您可以通过更改NEW
中的值来实际更改记录。在 AFTER 触发器中,您没有此选项。
你会做这样的事情:
DELIMITER //
CREATE TRIGGER OQminusPQ
AFTER INSERT ON orders
BEFORE EACH ROW
BEGIN
UPDATE products
SET Quantity = Quantity - NEW.Quantity;
END //
DELIMITER ;
答案 1 :(得分:0)
您不能在触发器中使用SELECT
语句。使用SELECT INTO
声明。