Re: Locks: Sicheres hochzählen in multiuserumgebung

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance



mike wrote:
Hi !

ist bei
update User1 set counter=(select counterfrom User1 where ID=4)+1
where ID=4

nicht die gefahr, dass wenn zwei aufrüfe gleichzeitig kommen, beide
denselben wert zunächst auslesen aus der table (da zunächst noch ein
shared lock ist), und dann beide hintereinander auf denselben wert
updaten (da ja dann exclusive lock), und der zähler dann nur um 1
erhöht wurde, anstatt um 2 ? Oder wartet der zweite user mit dem
select bis das update des 1. users fertig ist ? wirkliche
gleichzeitigkeit kann es ja nciht geben oder ?

Hallo Michael,
das Update setzt die Sperre, so dass der zweite User nicht auch ein Update
absetzen kann. Das Select ist dann quasi im Update gekapselt und befindet
sich damit in der gleichen Transaktion.


Einen schönen Tag noch,
Christoph
--
Microsoft SQL Server MVP
http://www.insidesql.org


.



Relevant Pages