在联结表中进行编辑的最佳实践是什么?
Items{ItemId, Name, Price...} Shops{ShopId, Name, Address...} ItemsInShops{ItemId, ShopId, DeliveryDate...}
现在我在一间商店里有30件物品。我想编辑该列表,然后取消选中10个项目,然后选中50个新项目。
我通过以下方式执行此操作:通过“ ItemId”从“ ItemsInShops”中删除所有行,并添加新值。我认为这不是很好的解决方案。有没有更好的方法来进行这种更新?
也许我没有以身作则表达问题。看看这个:
User{UserId, Username, Password...} Roles{RoleId, Name, Description} // Admin, Member, Superuser, Junior etc UsersInRoles{UserId,RoleId}
用户可以具有任意数量的角色。
John > Admin, Member, Superuser
那是联结表“ UserInRoles”中的三行。如果我想将此用户更新为具有以下角色:
John > Member, Junior
现在,我通过以下方式对数据库进行此更新:我从“ UserInRoles”表中删除了所有John角色,并添加了新数据。我不知道除了删除所有内容并插入新内容外,还有什么更好的方法来进行此更新?如果由于某种原因更新失败(例如,互联网连接丢失)怎么办?
我不知道除了删除所有内容并插入新内容外,还有什么更好的方法来进行此更新?
您不必删除所有开始的行。
您只能删除不再适用的行,而只能插入新的行。或者,您可以使用不再适用的值来更新不再适用的值。
所以要从中得到
Name Role -- John Admin John Member John Superuser
对此
Name Role -- John Member John Junior
您可以删除不再适用的内容。。。
delete from userinroles where Name = 'John' and (Role = 'Admin' or Role = 'Superuser');
并插入适用的内容。
insert into userinroles (Name, Role) values ('John', 'Junior');
或者,您可以使用新值更新值。
delete from userinroles where Name = 'John' and Role = 'Admin';
其次是
update userinroles set Role = 'Junior' where 'Name' = 'John' and Role = 'Superuser';
你说
如果由于某种原因更新失败(例如,互联网连接丢失)怎么办?
那就是交易的目的。单个SQL事务中的多个语句全部或全部都不成功-要么全部成功,要么不进行任何更改。