私はこのテーブルを持っています:
Mytable(ID, IDGroupReference, Model ...)
MyTable に多くのレコードがあります。はグループに属しているため、同じグループに属するすべてのレコードは同じ IDGroupReference を持ちます。IDGroup 参照は、グループに属するレコードの 1 つの ID です。したがって、グループのすべてのレコードは同じ IDGroupReference を持つため、1 つのクエリでグループのすべてのレコードを取得できます。
select * from MyTable where IDGroupReference = 12345;
1 つのレコードをあるグループから別のグループに変更できます。この場合、グループのすべてのレコードも変更したいと考えています。つまり、2 つのグループを 1 つにマージしたいのです。
この場合、次のクエリを使用できます。
Update Mytable set IDGroupReferencia = myIDReferenceGroup1 where IDGroupReference = IDGroupReferencieGroup2
グループ 2 の IDGroupReference をグループ 1 の IDGroupReference に設定しました。
私の疑問は、2 人のユーザーが 2 つの異なるレコードのグループを変更しようとしたときの同時実行性についてです。10,000 件のレコードと 2 人のユーザーを持つグループ 1 があるとします。ユーザー 1 はグループ 1 のレコード A をグループ 2 に変更しようとし、ユーザー 2 はレコード B をグループ 1 からグループ 3 に変更しようとします。
グループのレコード数、10.000、上記のクエリで IDGroupReference を更新しようとすると、SQL Server が 1 つずつ更新され、レコードがいくつあるのか、グループ内にいくつかのレコードが含まれている可能性があると思います。 b およびその他のレコードはグループ 3 に属し、すべてが同じグループに属している必要がありますが、グループ 2 または 3 では、どのユーザーが最後に更新されるかによって異なります。ただし、すべてのレコードは分割ではなく、同じグループに属している必要があります。
更新プログラムを使用すると、どのように機能しますか? トランザクションであり、影響を受けるレコードを誰も更新できないか、または最初のユーザーの更新中に 2 番目のユーザーがレコードを更新できるか?
つまり:
10 レコードのグループ 1。ユーザー 1 が更新を実行します。したがって、手順は次のとおりです。
- SQL Server はレコード 1 を更新します。
- SQL Server はレコード 2 を更新します
その間、2 番目のユーザーがクエリを実行します。
最初のユーザーのクエリによって更新される前に、2 番目のユーザーがレコード 3 を更新する可能性はありますか? これが発生すると、グループ 1 が 2 つのグループに分割されるため、一部のレコードはグループ 2 に移動し、一部のレコードはグループ 3 に移動します。
グループ 1 のすべてのレコードがグループ 2 またはグループ 3 に確実に移動するようにするにはどうすればよいですか?
ありがとう。