使用mysql更新触发器

时间:2012-03-26 16:48:36

标签: mysql sql triggers

我有两张桌子:

sales_order的

Order_ID       Buyer_ID     Emp_ID     Status (ENUM)
   1              2           3          P

Sales_Order_Details

Detail_ID      Order_ID     Quantity    Item_ID     Balance
   1              1            10          3           10
   2              1            20          6            5 

我正在尝试创建一个触发器,在Sales_Order_Details表上查找更新,并看到如果任何Detail_ID的Balance更改,它会查找具有相同Order_ID的所有Balance,如果all all 0则更改其状态在Sales_Order表中订购'C'。

我是触发器的新手并且已经阅读了一些内容,但我对使用它们感到很困惑。

CREATE TRIGGER flag_order_complete AFTER UPDATE ON Sales_Order_Details
FOR EACH ROW
BEGIN 
IF Balance = '0' THEN
UPDATE Sales_Order SET Status 'C' where Order_ID = old.Order_ID
END

现在这可能是非常错误的。如果有人能帮助我,那就太棒了!

1 个答案:

答案 0 :(得分:1)

嗯,有一些明显的语法问题。您可以尝试这样的事情:

CREATE TRIGGER flag_order_complete AFTER UPDATE ON Sales_Order_Details
FOR EACH ROW
BEGIN
  DECLARE total_balance INT(10);

  SELECT SUM(Balance) INTO total_balance
    FROM Sales_Order_Details
   WHERE Order_ID = new.Order_ID;

  IF (total_balance = 0) THEN
    UPDATE Sales_Order SET Status = 'C' where Order_ID = new.Order_ID;
  END IF;
END;

由于Sales_Order子句,FOR EACH ROW中的各个行可以多次更新(例如,如果两个具有相同Order_ID的行在同一时间更新)时间,如果总余额为零,Sales_Order中的匹配记录将更新两次。您可以使用循环覆盖更新记录的游标编写更复杂的查询,以避免这种情况。