如果特定列的字段存在,如何更新
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 表单字段验证 - 如何判断操作是插入还是更新?