sql >> Database >  >> RDS >> Mysql

Tafelniveau Vergrendelen in sluimerstand

"Select ... for update" wordt ondersteund in Hibernate via LockMode.UPGRADE die u bijvoorbeeld kunt instellen in een NamedQuery .

Maar het gebruik van applicatie/handmatige tabelrijvergrendeling heeft verschillende nadelen (vooral wanneer een databaseverbinding halverwege een transactie wordt verbroken) en uw update-procedure kan het zonder:

  • Start transactie.
  • update tabel set state='PENDING', server_id=1 waar state='IN PROGRESS';
  • Transactie uitvoeren
  • selecteer uit tabel waarin state='PENDING' en server_id=1;
  • [records verwerken]

Elke server moet een uniek nummer hebben om dit te laten werken, maar het zal minder foutgevoelig zijn en je laat het DBMS doen waar het goed in moet zijn:isolatie (zie ZUUR ).




  1. Dubbelzinnige kolom in MySQL/Rails-zoekmethode

  2. max(length(field)) in mysql

  3. DATETIME maken van DATE en TIME

  4. MySQL-injectie - Gebruik SELECT-query om BIJWERKEN/VERWIJDEREN