sql >> Database >  >> RDS >> Mysql

inno db isolatieniveaus en vergrendeling

InnoDB stelt specifieke soorten sloten als volgt in.

  • SELECT ... FROM is een consistente leesbewerking, waarbij een momentopname van de database wordt gelezen en geen vergrendelingen worden ingesteld, tenzij het transactie-isolatieniveau is ingesteld op SERIALIZABLE. Voor het SERIALIZABLE-niveau stelt de zoekopdracht gedeelde volgende-sleutelvergrendelingen in op de indexrecords die het tegenkomt.

  • SELECTEER ... UIT ... VERGRENDELEN IN DE DELENMODUS stelt gedeelde volgende-sleutelvergrendelingen in op alle indexrecords van de zoekontmoetingen.

  • Voor indexrecords waar de zoekacties plaatsvinden, blokkeert SELECT ... FROM ... FOR UPDATE andere sessies om SELECT ... FROM ... LOCK IN SHARE MODE te doen of om bepaalde transactie-isolatieniveaus in te lezen. Consistent lezen negeert eventuele vergrendelingen die zijn ingesteld op de records die in de leesweergave bestaan.

  • UPDATE ... WAAR ... stelt een exclusieve volgende toetsvergrendeling in op elk record dat de zoekopdracht tegenkomt.

  • DELETE FROM ... WHERE ... stelt een exclusieve next-key lock in op elke record die de zoekopdracht tegenkomt.

  • INSERT stelt een exclusief slot in op de ingevoegde rij. Deze vergrendeling is een index-recordvergrendeling, geen volgende-sleutelvergrendeling (dat wil zeggen, er is geen openingvergrendeling) en verhindert niet dat andere sessies in de opening vóór de ingevoegde rij worden ingevoegd.

InnoDB heeft verschillende soorten vergrendelingen op recordniveau:

  • Record lock:Dit is een lock op een index record.

  • Gap lock:Dit is een slot op een gat tussen indexrecords, of een slot op het gat voor het eerste of na het laatste indexrecord.

  • Next-key lock:Dit is een combinatie van een record lock op het index record en een gap lock op het gat voor het index record.

Meer bekijken :

Het fantoomprobleem vermijden met Next-Key Locking

Een impasse vermijden



  1. SQL IN-instructie - houd duplicaten bij het retourneren van resultaten

  2. PDO fetch levert niets op

  3. SQLSTATE [HY000] [2003] Kan geen verbinding maken met MySQL-server op '127.0.0.1' (61) fout Laravel 4.1

  4. PostgreSQL - groeperen op jsonb-kolom