如何更新特定列是否存在字段

时间:2019-10-31 14:50:17

标签: mysql sql triggers database-trigger

我的请求有问题,我必须更新我的现有字段并且不进行插入,因为它将被复制,并且我已经知道ON DUPLICATE KEY UPDATE或REPLACE,但是它不起作用,目标是更新我的产品数量,不要插入一些。我尝试通过触发器进行操作,但也无法正常工作,您能解决我的问题吗?

INSERT INTO cart(product_id, quantity) VALUES (4, quantity +1 )

但是,如果该产品已经存在,它会向我添加一行,并且我想知道它不是关键,所以我希望它能够自动检测到它来更新

UPDATE cart SET quantity = quantity+1 WHERE id= id

这是我的触发器:

BEGIN
IF EXISTS (SELECT product_id FROM cart WHERE product_id = NEW.product_id)
THEN
    UPDATE cart SET quantity = NEW.quantity WHERE id = NEW.user_id;
ELSE
    INSERT INTO cart(product_id, quantity) VALUES (NEW.product_id, NEW.quantity);        
END IF;  

END

这是一个问题: 相同的两行,对于这个示例,我想像ID为1的行一样一行

Image expalin problem

非常感谢,并感谢我的参与和表达。

1 个答案:

答案 0 :(得分:2)

无需触发器。您可以使用MySQL insert ... on duplicate key syntax

insert into cart(product_id, quantity) 
    values (4, 1)
    on duplicate key update quantity = quantity + values(quantity)

要使其正常工作,您需要在列product_id上使用唯一约束(或主键约束)。

使用这种语法,如果一条记录已经存在且与您要插入的记录相同,则product_id会执行update,这会将新的quantity添加到现有记录。