Wenn Sie davon ausgehen, dass es sich um einen MS SQL-Server handelt, möchten Sie wahrscheinlich UPDLOCK
möglicherweise kombiniert mit ROWLOCK
( Hinweise zur Tabelle ). Ich habe Schwierigkeiten, einen guten Artikel zu finden, der die Theorie beschreibt, aber hier ist ein schnelles Beispiel:
SELECT id From mytable WITH (ROWLOCK, UPDLOCK) WHERE id = 1
Mit dieser Anweisung wird ein Update-Sperre auf die Zeile für die Dauer der Transaktion (daher ist es wichtig zu wissen, wann die Transaktion endet). Da Aktualisierungssperren unvereinbar mit exklusiven Schlössern (für die Aktualisierung von Datensätzen erforderlich), so wird verhindert, dass jemand diesen Datensatz aktualisiert, bis die Transaktion beendet ist.
Beachten Sie, dass andere Prozesse, die versuchen, diesen Datensatz zu ändern, blockiert werden, bis die Transaktion abgeschlossen ist, jedoch mit dem von ihnen angeforderten Schreibvorgang fortfahren, sobald die Transaktion beendet ist (es sei denn, sie werden durch Zeitüberschreitung oder als blockierter Prozess beendet). Wenn Sie dies verhindern wollen, müssen Ihre anderen Prozesse zusätzliche Hinweise verwenden, um entweder abzubrechen, wenn eine inkompatible Sperre festgestellt wird, oder den Datensatz zu überspringen, wenn er sich geändert hat.
Auch, Sie sollten diese Methode nicht verwenden, um Datensätze zu sperren, während Sie auf Benutzereingaben warten . Wenn dies Ihre Absicht ist, sollten Sie stattdessen eine Art Spalte "wird geändert" in Ihre Tabelle aufnehmen.
Die Sperrmechanismen des SQL-Servers eignen sich eigentlich nur zur Wahrung der Datenintegrität bzw. zur Vermeidung von Deadlocks - Transaktionen sollten generell so kurz wie möglich und sollte auf keinen Fall beibehalten werden, während man auf Benutzereingaben wartet.