我有这张桌子:
Mytable(ID, IDGroupReference, Model ...)
我在 MyTable 中有很多记录。属于一个组,因此属于同一组的所有记录具有相同的 IDGroupReference。IDGroup 引用是属于该组的记录之一的 ID。所以一个组的所有记录都具有相同的 IDGroupReference,我可以通过一次查询获得该组的所有记录:
select * from MyTable where IDGroupReference = 12345;
我可以将一个记录从一组更改为另一组,在这种情况下,我也想更改该组的所有记录。我的意思是,我想将两个组合二为一。
在这种情况下,我可以使用这个查询:
Update Mytable set IDGroupReferencia = myIDReferenceGroup1 where IDGroupReference = IDGroupReferencieGroup2
我将组 2 的 IDGroupReference 设置为组 1 的 IDGroupReference。
我的疑问是并发性,当两个用户尝试更改两个不同记录的组时。想象一下,我的组 1 有 10.000 条记录和两个用户。用户 1 尝试将组 1 的记录 A 更改为组 2,用户 2 尝试将记录 B 从组 1 更改为组 3。
该组有多少记录,10.000,我认为当我尝试使用我上面描述的查询更新 IDGroupReference 时,SQL Server 会一一更新,以及有多少记录,有可能某些记录在组中b 和其他记录都在组 3 中,当所有的必须在同一个组中时,在组 2 或 3 中,取决于哪个用户是最后更新的。但所有记录必须在同一个组中,而不是拆分。
那么,当我使用更新时,它是如何工作的?是一个事务,没有人可以更新任何将受到影响的记录,或者第二个用户可以在第一个用户的更新过程中更新记录?
我是说:
第 1 组有 10 条记录。用户一执行更新。所以步骤是:
- SQL Server 更新记录 1。
- SQL Server 更新记录 2
同时,第二个用户执行查询。
有可能第二个用户更新记录 3 之前是由第一个用户的查询更新的吗?因为如果发生这种情况,那么第 1 组将分成两组,一些记录进入第 2 组,一些记录进入第 3 组。
如何确保第 1 组的所有记录都转到第 2 组或第 3 组?
谢谢。