Loading:

Promocja Helion.pl

Poziom izolacji transakcji - MySQL

 

Poziom izolacji transakcji


Poziom izolacji transakcji wpływa bezpośrednio na zachowanie się transakcji. Zmiana poziomu izolacji może prowadzić do zupełnie różnych wyników poleceń SQL.


Poziom izolacji transakcji oznacza jak ''szczelnie'' jest zaizolowana tranasakcja i jakiego rodzaju izolacja jest skojarzona z zapytaniami wewnątrz transakcji. Można wybrać jeden z czterech poziomów izolacji (wymienionych poniżej w kolejności rosnącej szczelności izolacji).

  1. READ UNCOMMITTED
    Ustawienie takiego poziomu transakcji powoduje dopuszczenie tzw. ''dirty reads'', tzn. że niepotwierdzone poleceniem COMMIT efekty poleceń z jednej transakcji są widoczne z poziomu drugiej transakcji.
  2. READ COMMITTED
    Potwierdzone poleceniem COMMIT zmiany danych w tablicach są widoczne z poziomu innych transakcji. Oznacza to, że identyczne polecenia w obrębie tej samej transakcji mogą zwrócić zupełnie inne wyniki. W niektórych systemach baz danych jest to domyślny sposób izolacji transakcji.
  3. REPEATABLE READ
    Jest to domyślny sposób izolacji transakcji dla tablic typu InnoDB. W obrębie transakcji wszystkie zapytania są spójne.
  4. SERIALIZABLE
    Jeśli w obrębie jednej transakcji wykonujemy właśnie polecenie SELECT wówczas z poziomu dowolnej innej transakcji nie możemy wykonać zmiany danych, które są właśnie wybierane poleceniem SELECT. Inaczej mówiąc zapytania w obrębie tranakcji są wykonywane tak, jakby automatycznie była do nich dołączana klauzula LOCK IN SHARE MODE.

Tablice InnoDB wspierają wszystkie cztery poziomy izolacji transakcji. Przy przenoszeniu kodów SQL na inny system baz danych, należy mieć świadomość, że nie szystkie wymienione wyżej poziomy izolacji są wspierane przez inne systemy baz danych, a co więcej, w niektórych z nich domyślnym poziomem izolacji jest zupełnie inny poziom niż w MySQL.


  • SQL SERVER - domyślnie READ COMMITTED, poza tym, nie ma żadnych innych poziomów izolacji.
  • Oracle - domyślnie READ COMMITTED, poza tym można wybrać też SERIALIZABLE i niestandardowy READ ONLY.
  • DB2 - domyślnie REPEATABLE READ, poza tym można wybrać też UNCOMMITTED READ oraz inne niestandardowe poziomy izolacji.
  • PostgreSQL - domyślnie REPEATABLE READ, poza tym można też wybrać SERIALIZABLE.

 

Przykłady,

Zakładamy, że mamy następującą tablicę tab z danymi:

mysql> CREATE TABLE tab (f INT) TYPE = InnoDB;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO tab values (1),(2),(3),(4),(55);
Query OK, 5 rows affected (0.00 sec)

Na początek sprawdźmy jaki poziom izolacji transakcji obowiązuje w danej chwili (jeśli tego nie zmieniliśmy my lub administrator to domyslnym poziomem izolacji transakcji w MySQL jest REPEATABLE READ).

mysql> SELECT @@tx_isolation;
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.00 sec)


Źródło: http://gryf.mif.pg.gda.pl/~mate/wyklady/bazy/transakcje.html



Napisz Artykuł

Listing

niema


Ten wpis posiada swój wątek na forum

Wszystkie pytania prosimy kierować właśnie tam ponieważ komentarze to miejsce na poprawki do kodu lub alternatywne rozwiązania i pytania nie będą publikowane

http://forum.funkcje.net/forum/viewtopic.php?f=2&t=5568

Dane do logowania na forum są takie same jak na funkcje.net



Dodano przez: divix
Ranga: Administrator serwisu Punktów: 38323
Komentarze użytkowników
    • Treść komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-17 v.1.5 | design: diviXdesign & rainbowcolors