Mysql 7

7.5.8. Modelul de tranzacție InnoDB

Numirea InnoDB model de tranzacție este de a combina cele mai bune proprietăți ale bazei de date variabile multiple tradiționale de blocare în două faze. Pentru InnoDB tabele sunt de blocare la nivel de rând, și interogări implicite sunt executați ca o citire integrală fără încuietori, similar cu modul în care aceasta este pusă în aplicare în Oracle. InnoDB tabelul de blocare de stocare este organizată în mod eficient, astfel încât nu este nevoie să se extindă de blocare: de obicei, câțiva utilizatori pot bloca orice linie sau orice set de rânduri în baza de date, fără ca toate memoria disponibilă pentru InnoDB.

În tabelele InnoDB, toate acțiunile utilizatorului sunt efectuate de către tranzacție. Dacă MySQL este utilizat în modul auto-angajeze, o tranzacție separată este creată pentru fiecare instrucțiune SQL. MySQL se deschide întotdeauna o nouă conexiune cu modul de autocommit activat.

În cazul în care modul de blocare automată este dezactivat prin intermediul SET AUTOCOMMIT = 0. presupunem că utilizatorul are în mod constant o tranzacție deschisă. Dacă el efectuează SQL COMMIT sau ROLLBACK. că tranzacția curentă este finalizată, imediat ce este pornit o nouă tranzacție. Ambele se face referire la operatorul elimină toate blocările InnoDB, care au fost stabilite în timpul tranzacției curente. Un COMMIT înseamnă că modificările făcute în timpul tranzacției curente, acceptate și devin vizibile pentru ceilalți utilizatori. ROLLBACK anulează toate modificările făcute de tranzacție.

În cazul în care compusul este setat AUTOCOMMIT = 1. utilizatorul, cu toate acestea, se poate utiliza tranzacția prin începerea acestora cu BEGIN și se termină folosind COMMIT sau ROLLBACK.

Utilizatorul poate schimba nivelul de izolare pentru o singură sesiune sau o nouă conexiune, după cum urmează:

Să acorde o atenție faptul că numele de nivel de izolație este scris fără cratimă în SQL-expresie. Dacă specificați cuvântul cheie la nivel mondial în expresia de mai sus, aceasta va determina nivelul de izolare pentru noi conexiuni, dar nu va avea nici un efect pentru conexiunile vechi. Orice utilizator poate schimba nivelul de izolare pentru sesiunea, chiar și în cadrul tranzacției. În versiunile mai vechi de 3.23.50 SET TRANSACTION a avut nici un efect asupra InnoDB mese. În versiunile mai vechi de 4.0.5, puteți utiliza numai în citire repetabile și serializabil.

Puteți obține informații cu privire la nivelul de izolare, sau global pentru conexiunea curentă:

În rândul InnoDB de blocare la nivel utilizează așa-numitele încuietori next-cheie. Acest lucru înseamnă că, în afară de înregistrările index InnoDB poate bloca, de asemenea, „intervalul“ înainte de înregistrarea index pentru a bloca inserțiile de alți utilizatori imediat înainte de înregistrarea indicelui. blocare Următoarea cheie înseamnă un sistem de blocare, care este plasat pe înregistrarea de index și decalajul înainte de a fi. Intervalul de blocare se aplică numai pentru a bloca intervalul înainte de unele intrări de index.

Descrierea detaliată a fiecărui nivel de izolare în InnoDB:

CITEȘTE necontractate De asemenea, numit „citire murdar“: non-blocare de eșantionare (SELECT) realizată în așa fel încât să nu vedem posibilitatea de versiuni timpurii ale înregistrării; astfel încât acestea sunt „necoordonate“ citit în acest nivel de izolare; în alte cazuri, acest nivel funcționează ca READ SĂVÂRȘITE.

READ ANGAJATE Ceva similar cu nivelul de izolare Oracle. Toate expresiile SELECT. PENTRU UPDATE și SELECT. LOCK ÎN DISTRIBUIE modul bloc înregistrează doar index și nu blochează fanta în fața lor. Prin urmare, acestea permit să adăugați în mod liber înregistrări noi după blocate. UPDATE și DELETE. care utilizează un index unic și termenii de căutare unic pentru a bloca doar înregistrarea indicelui găsit, nu diferența înainte de a fi blocat. Cu toate acestea, UPDATE, DELETE și tipul de interval în InnoDB trebuie să setați blocarea următoare sau blocare cheie și interval de bloc adăugarea altor utilizatori în intervalul acoperit intervalul. Acest lucru este necesar deoarece „Rânduri Phantom“ trebuie să fie blocate pentru replicare de succes și de recuperare în MySQL. Citește Consecvent funcționează ca în Oracle: fiecare citire consistente, chiar și în cadrul aceleiași tranzacții, seturi și citește propria imagine.

READ repetabile Acest nivel de izolare este folosit de InnoDB implicit. SELECT. PENTRU UPDATE. SELECT. LOCK ÎN MOD SHARE. UPDATE. , Și DELETE. care utilizează indici unici și bloc unic condiție de căutare doar recordul indicele găsit, și nu blochează decalajul înainte de a fi. În alte cazuri, operațiunea utilizează un încuietori next-cheie de blocare gama de index scanate sau următorul interval de blocare-cheie, și blocuri noi completări de către alți utilizatori.

În consecventă citește există o diferență importantă de la nivelul de izolare anterior: la acest nivel consecvente citește în aceeași tranzacție citește imaginea luată pentru prima lectură. Acest acord înseamnă că, dacă urmați câteva selecții simple (SELECT) în aceeași tranzacție, aceste probe va fi holistică în raport unul cu altul.

Serializabilă Acest nivel este similar cu cel anterior, dar simplu SELECT convertit la SELECT. LOCK ÎN MOD SHARE.