如何使用MySQL中的After Trigger从2个不同的表中提取列值?

时间:2016-02-07 19:43:56

标签: mysql

我有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 ;

注意:我已创建了触发器,现在如何显示结果?

2 个答案:

答案 0 :(得分:1)

在行触发器中,您通常不能(通常不希望)直接查询触发器附加到的表。 (查看“变异表”问题。)相反,在INSERT行触发器中,您可以访问名为NEW的伪记录,其中包含新记录 ,因为它将是触发代码退出后。 。 (在DELETE行触发器中,您改为使用伪记录OLD,其中包含触发器触发前的记录,并在UPDATE行触发您同时拥有OLDNEW。)

请注意,在 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声明。