我有一个 product_group 表,其中包含以下字段:group_id,product_id,order。将对该表进行大量查询:单一表单视图可以通过一次提交插入新记录和/或更新现有记录。
我正在试图找出最佳解决方案来涵盖以下3个案例:
用户尝试插入现有行:不执行任何操作。这里3列的唯一索引可能很有用。
用户只更改订单栏:执行更新。
用户插入一组全新的值:执行插入。
有没有办法将所有这些放在一个MySQL查询中?如果没有,这里最好的方法是什么?目标是尽可能地限制数据库查询。
答案 0 :(得分:1)
这样做你想要的吗?
insert into product_group(group_id, product_id, `order`)
values (@group_id, @product_id, @order)
on duplicate key update `order` = values(`order`);
以及group_id, product_id
上的唯一索引:
create unique index idx_product_group_2 on product_group(group_id, product_id)
这可以处理你的三种情况:
order
列。group_id
或product_id
的新行。作为一个注释,order
是一个糟糕的列名,因为它是一个SQL关键字。