检查条件时触发器无法正常工作

时间:2013-07-31 19:30:18

标签: mysql sql triggers

我只想以两种方式存储记录。

  1. 如果存在,则会更新信息
  2. 如果它不存在,它将作为新记录插入
  3. 以下是我的表的大纲模式:

    product_purchase_item 有product_purchase_item_id,product_id,数量列
    product_stock 有product_stock_id,product_id,product_total_quantity列

    我正在创建一个触发器

     DELIMITER //
     CREATE TRIGGER store_check AFTER INSERT ON product_purchase_item
     FOR EACH ROW
     BEGIN
      DECLARE X INTEGER;
      SET X =(SELECT product_id FROM product_stock where product_id = NEW.product_id);
      IF NEW.product_id !=X  THEN
       INSERT INTO product_stock VALUES(NULL,NEW.product_id,NEW.quantity);
      ELSE
       UPDATE product_stock 
       SET product_total_quantity=product_total_quantity+NEW.quantity
       WHERE product_id=NEW.product_id;
      END IF;
     END;//
     DELIMITER;//
    

    问题出在 product_stock 表中,当产品记录不存在时,INSERT查询不起作用,但当产品记录存在时,更新查询工作正常。

2 个答案:

答案 0 :(得分:1)

真的是INSERT语句"不起作用"?或者,INSERT语句根本没有执行的问题是什么?

当前面的SELECT查询没有返回一行时会发生什么?将哪个值分配给X

X具有该值时,是否进行条件测试" foo != X"返回TRUE,还是返回其他内容(如FALSE或NULL)?

你尝试过这样的事吗?

IF NEW.product_ID = X THEN
   UPDATE ...
ELSE
   INSERT ...    
END IF;

(我知道用一个问题回答一个问题是不好的做法;但它看起来很合适,因为回答这些问题会得到你真正想问的问题的答案。)

答案 1 :(得分:1)

您可以通过MySQL的标准命令之一进行所需的操作:

INSERT INTO product_stock (product_id,product_total_quantity) 
                   VALUES (NEW.product_id,NEW.quantity)
ON DUPLICATE KEY UPDATE product_total_quantity=product_total_quantity+NEW.quantity;

请参阅MySQL manual