2つのスレッドがあり、次のようなステートメントを使用して別々のトランザクションでデータベースを更新している場合
スレッド1
UPDATE people set id='12346' WHERE name='Jeff'
スレッド2
UPDATE people SET name = 'Jeff' WHERE id='12345'
明らかにここにはレースがあります。スレッド1がスレッド2の前にIDを変更した場合、12345は無効なIDになります(他の誰もそれを使用していないと仮定します)。
私が疑問に思っているのは、楽観的ロックを使用している場合、これは楽観的ロックエラー(たとえば、古いレコードエラー)がスローされる可能性がある状況ですか?UPDATE / WHEREは読み取りと書き込みを構成しますか、それとも各UPDATEはアトミックステートメントを実行しますか(またはデータベースによって異なります)?