如果存在则更新否则插入

时间:2015-04-28 19:31:09

标签: mysql

这是购物车的表结构

enter image description here

如果表中不存在新的user_idproduct_id组合,我想插入一行,否则我只想在组合存在的情况下更新quantity。我的目的是更新数据库中某人的购物车,如果有新商品则插入。

例如,如果我已将这些数据存在于表格中 enter image description here

如果我有这些数据组(1,23,5),它只会更新第一行中的quantity,因为组合(1,23)已经存在
enter image description here

如果我有这些数据组(1,38,1),将插入一个新行,因为组合(1,38)不存在
enter image description here

2 个答案:

答案 0 :(得分:1)

为您不希望重复的值定义唯一索引:

create unique index idx_shoppingcart_user_product on shoppingcart(userid, productid)

然后,不允许将这些两个列复制在一起。 (注意:您还可以使用unique中的primary keycreate table来定义此约束。)

然后使用on duplicate key

insert into shoppingcart(user_id, product_id, quantity) 
    select . . . 
    on duplicate key update
        quantity = quantity + values(quantity);

或者,或许,

    on duplicate key update
        quantity = values(quantity);

“只更新quantity”,您的问题含糊不清。

答案 1 :(得分:0)

您可以以编程方式执行此操作。或者创建一个复合主键:

CREATE TABLE INFO (
user_id INT,
product_id INT,
PRIMARY KEY (user_id, product_id));