sql >> Database >  >> RDS >> Mysql

MySQL InnoDB:verschil tussen `FOR UPDATE` en `LOCK IN SHARE MODE`

Ik heb geprobeerd het verschil tussen de twee te begrijpen. Ik zal documenteren wat ik heb gevonden in de hoop dat het nuttig zal zijn voor de volgende persoon.

Beide LOCK IN SHARE MODE en FOR UPDATE zorg ervoor dat geen enkele andere transactie de geselecteerde rijen kan bijwerken. Het verschil tussen de twee zit hem in de manier waarop ze sloten behandelen tijdens het lezen van gegevens.

LOCK IN SHARE MODE verhindert niet dat een andere transactie dezelfde rij leest die was vergrendeld.

FOR UPDATE voorkomt andere vergrendelende leesbewerkingen van dezelfde rij (niet-vergrendelende leesbewerkingen kunnen die rij nog steeds lezen; LOCK IN SHARE MODE en FOR UPDATE zijn vergrendelde leesbewerkingen).

Dit is van belang in gevallen zoals het bijwerken van tellers, waarbij u de waarde in de ene verklaring leest en de waarde in een andere bijwerkt. Hier met behulp van LOCK IN SHARE MODE laat 2 transacties dezelfde initiële waarde lezen. Dus als de teller door beide transacties met 1 werd verhoogd, zou de eindtelling slechts met 1 kunnen toenemen - aangezien beide transacties aanvankelijk dezelfde waarde hadden.

FOR UPDATE gebruiken zou de 2e transactie hebben geblokkeerd van het lezen van de waarde totdat de eerste is voltooid. Dit zorgt ervoor dat de teller met 2 wordt verhoogd.



  1. Een subquery schrijven met Zend DB

  2. Hoe weet ik of bij gebruik van dubbele sleutelupdate een rij is ingevoegd of bijgewerkt?

  3. Speel 2.4 - Slick 3.0.0 - VERWIJDEREN werkt niet

  4. Een plan maken voor mijn eerste MySQL-project