如果特定列的字段存在,如何更新

Posted

技术标签:

【中文标题】如果特定列的字段存在,如何更新【英文标题】:How to update if field exist for a specific column 【发布时间】:2019-10-31 14:50:17 【问题描述】:

我的请求有问题,我必须更新我现有的字段,而不是进行插入,因为它会被重复,而且我已经知道 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;  

结束

这是一个问题: 两行相同,我想在这个例子中像一行一样,id 为 1

Image expalin problem

非常感谢,对不起我的英语和表达方式

【问题讨论】:

【参考方案1】:

不需要触发器。你可以使用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 添加到现有记录中。

【讨论】:

但是如果我有一个新用户并且我做到了唯一;例如,用户 id 2 没有产品编号 4:/ 因为它是唯一的,所以情况是:user_id = 1,产品 id = 4,数量 = 2 和 user_id = 2,product_id = 4 和数量 = 5这是不可能的 @Amelya:您的示例中没有 user_id。此列是否属于cart 在link 有我的购物车的注册示例 好的,所以你可能想要一个对(user_id, product_id) 的唯一约束。 user_id 列也应该是您的 insert 语句的一部分,所以:insert into cart(user_id, product_id, quantity) values (1, 4, 1) on duplicate key update quantity = quantity + values(quantity) 目前id是主键并且是唯一的,没有user_id和product_id的限制,这个系统的思想:一个用户可以点几篇文章,但是一篇文章必须只出现在一行与用户的关系,例如:用户 1 产品 4 数量 2 和用户 2 产品 4 数量 5,每个用户一个产品的约束和数量的增量值,实际上只有 id 作为 product_id 和 user_id 的主键和索引

以上是关于如果特定列的字段存在,如何更新的主要内容,如果未能解决你的问题,请参考以下文章

如果列的值在 Oracle sql 中的格式不同,则使用特定格式更新日期

Django 表单字段验证 - 如何判断操作是插入还是更新?

如何更新 json 类型的 json 中的任何字段?它应该接受一个对象或一个键数组,如果它存在则更新键,否则创建

mysql如何根据一列值更新另一列的值?

如何使用特定行更新 sqlite 表而不重复存在的行?

BEFORE UPDATE 触发器阻止所有更新