0

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

  1. 如果存在,它将更新信息
  2. 如果它不存在,它将作为新记录插入

以下是我的表的大纲模式:

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 查询不起作用,但当产品记录存在时,更新查询工作正常。

4

2 回答 2

1

真的是“不起作用”的 INSERT 语句吗?或者,是根本没有执行 INSERT 语句的问题吗?

当前面的 SELECT 查询没有返回一行时会发生什么?赋予什么价值X

何时X具有该值,条件测试“ foo != X”返回 TRUE,还是返回其他值(如 FALSE 或 NULL)?

你有没有尝试过这样的事情?

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

(我知道用问题回答问题是不好的做法;但这似乎很恰当,因为回答这些问题会让你得到你真正想问的问题的答案。)

于 2013-07-31T19:44:14.667 回答
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 手册

于 2013-07-31T19:52:39.423 回答