我有一个名为ice_cream
的MySQL数据库,其中有三个表users
,flavors
和favorites
。 favorites
中的每条记录都有一个用户和一个风味的参考,用户可以有多种冰淇淋口味。
我正在尝试编写一个事务来完全用另一组收藏夹替换用户的收藏夹。例如,当API接受
时PUT /user/100/favorites
{
"flavors": {
"2": { "stars": 2 },
"3": { "stars": 5, "comments": "Changed my life" },
"18": { "stars": 4, "comments": " " },
"24": { "stars": 4 }
}
}
favorites
表应该从
| id | user_id | flavor_id | stars | comments |
| --- | ------- | --------- | ----- | ------------------ |
| 200 | 100 | 2 | 2 | Tastes OK |
| 201 | 100 | 4 | 3 | |
| 202 | 100 | 5 | 3 | |
要
| id | user_id | flavor_id | stars | comments |
| --- | ------- | --------- | ----- | ------------------ |
| 200 | 100 | 2 | 2 | |
| 201 | 100 | 3 | 5 | Changed my life |
| 203 | 100 | 18 | 4 | |
| 204 | 100 | 24 | 4 | |
实现这一目标的最有效的陈述是什么?
要考虑的要点:
答案 0 :(得分:1)
在这种情况下,最有效的语句集是删除和插入
delete from flavors
where user_id =100;
和循环服务器端用于插入新值或批量插入,其中包含重复值行中的所有值
insert into flavors ( user_id, flavor_id, stars , comments )
values ( 100,2 ,2 null),
(100, 3, 5 , 'Changed my life'),
(100 ,18,4 , ),
(100 , 24 ,4 , null)