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

Sperre auf Tabellenebene im Ruhezustand

"Select ... for update" wird in Hibernate über LockMode.UPGRADE in die Sie beispielsweise einen NamedQuery .

Aber die Verwendung von anwendungsbezogenem/manuellem Sperren von Tabellenzeilen hat mehrere Nachteile (insbesondere wenn eine Datenbankverbindung mitten in einer Transaktion unterbrochen wird) und Ihre Aktualisierungsprozedur kann darauf verzichten:

  • Transaktion starten.
  • Tabellensatz aktualisieren state='PENDING', server_id=1 where state='IN PROGRESS';
  • Transaktion ausführen
  • aus Tabelle auswählen, wobei state='PENDING' und server_id=1;
  • [Datensätze verarbeiten]

Jeder Server muss eine eindeutige Nummer haben, damit dies funktioniert, aber es ist weniger fehleranfällig und Sie lassen das DBMS tun, was es gut kann:Isolation (siehe ACID ).