我只想以两种方式存储记录。
以下是我的表的大纲模式:
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查询不起作用,但当产品记录存在时,更新查询工作正常。
答案 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