0

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はアトミックステートメントを実行しますか(またはデータベースによって異なります)?

4

1 に答える 1

1

DBMSがアトミックステートメントとして更新を実装しないのは非常に貧弱な形式ですが、特定の環境でこれを確認することは価値があります。

于 2012-11-06T01:12:55.367 に答える