基于现有行的受控 table 查询
Controlled table quering based on existing rows
我有一个 product_group table,其中包含以下字段:group_id、product_id、订单。 table 将被大量查询:单一表单视图可以插入新记录 and/or 通过一次提交更新现有记录。
我正在尝试找出涵盖以下 3 种情况的最佳解决方案:
用户尝试插入现有行:什么都不做。此处 3 列的唯一索引可能很有用。
用户仅更改订单列:执行更新。
用户插入一组全新的值:执行插入。
有没有办法将所有这些放在一个 MySQL 查询中?如果没有,这里最好的方法是什么?目标是尽可能限制数据库查询。
这是你想要的吗?
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 关键字。
我有一个 product_group table,其中包含以下字段:group_id、product_id、订单。 table 将被大量查询:单一表单视图可以插入新记录 and/or 通过一次提交更新现有记录。
我正在尝试找出涵盖以下 3 种情况的最佳解决方案:
用户尝试插入现有行:什么都不做。此处 3 列的唯一索引可能很有用。
用户仅更改订单列:执行更新。
用户插入一组全新的值:执行插入。
有没有办法将所有这些放在一个 MySQL 查询中?如果没有,这里最好的方法是什么?目标是尽可能限制数据库查询。
这是你想要的吗?
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 关键字。