Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Sperren einer Tabelle mit Ruhezustand

Sie müssen pessimistisches Sperren verwenden, was durch

erreicht werden kann
setLockMode(String alias, LockMode lockMode) 

auf die Abfrage und verwenden Sie LockMode.UPGRADE .

Siehe Query.setLockMode

Dies wird jedoch sicherlich die Skalierbarkeit und Leistung beeinträchtigen, wenn Sie viel auf diese Tabelle zugreifen. Sie verwenden besser entweder eine Sequenz oder eine andere Strategie besteht darin, einen Dienst zum Zuweisen von Nummern (z. B. ein SSB) zu erstellen, der 100 Nummern gleichzeitig erfasst, die Datenbank aktualisiert und sie verteilt. Das spart Ihnen 198 Datenbankzugriffe.

UPDATE:

Sie müssen auch Ihr Tabellendesign leicht ändern. Es ist besser, eine einzelne Zeile mit einer bekannten ID zu haben und die Nummer, die Sie erhöhen, in einer anderen Spalte zu speichern. Dann sollten Sie die Zeile aktualisieren, anstatt die alte Zeile zu löschen und eine neue hinzuzufügen. Andernfalls funktioniert die Strategie zum Sperren von Zeilen nicht.

UPDATE2:

OP stellte fest, dass Folgendes funktionierte:

session.get(class.Class, id, lockOption)