SYSTEMY BAZ DANYCH SQL TEMAT 25-07: Blokowanie tabel. Autor dokumentu: Wojciech Galiński ŹRÓDŁA WIEDZY:

czwartek, 9 lutego 2017 r.

351203 Technik informatyk

http://dev.mysql.com/doc/, http://webmaster.helion.pl/index.php/kurs-mysql.

Zagadnienia obowiązkowe 1. Blokowanie tabel w tabelach z obsługą transakcji – wyróżniamy: • blokada gwarantująca możliwość odczytu danych (blokada współdzielona) – zablokowanie możliwości zakładania blokady wyłącznej; • blokada umożliwiająca zapis danych (blokada wyłączna) – zablokowanie innym użytkownikom dostępu do modyfikowanych danych. Powyższe blokady są nakładane np. na tabele MySQL oparte o silnik „InnoDB”. 2. Domyślne ustawienia izolowania danych podczas transakcji – wyróżniamy: • podczas odczytu danych – (a nie podczas trwania całej transakcji) wymagane jest nałożenie blokady współdzielonej na odczytywane dane (rekordy); • podczas całej transakcji zapisu danych – wymagane jest nałożenie blokady wyłącznej na modyfikowane dane (rekordy). 3. Ilustracja blokowania przez serwer MySQL tabel z obsługą transakcji – przedstawia to poniższy przykład. PRZYKŁAD: USE test; DROP TABLE IF EXISTS tab; CREATE TABLE tab ( id INT PRIMARY KEY AUTO_INCREMENT, k1 VARCHAR(20), k2 FLOAT ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO tab (k1) VALUES ('aaa'), ('bbb'); SELECT * FROM tab;

KROK 1

SESJA 1

2 3 4

SESJA 2

SESJA 3

use test; SELECT * FROM tab; UPDATE tab SET k2=1 WHERE id=1;

use test; SELECT * FROM tab; UPDATE tab SET k2=1 WHERE id=2;

SELECT * FROM tab;

SELECT * FROM tab;

START TRANSACTION; UPDATE tab SET k1='abd' WHERE id=1; SELECT * FROM tab;

COMMIT; albo ROLLBACK; SELECT * FROM tab;

Na koniec należy po sobie posprzątać. Oto instrukcje usuwające dane do ćwiczenia: DROP TABLE tab;

4. Blokowanie tabel w tabelach bez obsługi transakcji – w tabelach, które nie obsługują transakcji (np. tabele MySQL oparte o silnik „MyISAM”) stosuje się następujące działania: • „ręczne” blokowanie tabel – realizujemy to za pomocą instrukcji: LOCK TABLES tabela_1 TRYB_BLOKOWANIA, … ; gdzie „TRYB_BLOKOWANIA” oznacza jedną z wartości: ◦ „READ” – blokada potrzebna do odczytu danych (blokada współdzielona); ◦ „WRITE” – blokada potrzebna do zapisu danych (blokada wyłączna); PRZYKŁADY: LOCK TABLES tabela1 READ; LOCK TABLES tabela2 WRITE; LOCK TABLES tabela3 READ, tabela4 WRITE;



„ręczne” odblokowanie tabel – realizujemy to za pomocą instrukcji: UNLOCK TABLES;

5. Ilustracja blokowania przez serwer MySQL tabel bez obsługi transakcji – przedstawia to poniższy przykład. PRZYKŁAD: USE test; DROP TABLE IF EXISTS tab; CREATE TABLE tab ( id INT PRIMARY KEY AUTO_INCREMENT, k1 VARCHAR(20), k2 FLOAT ) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO tab (k1) VALUES ('aaa'), ('bbb'); SELECT * FROM tab;

KROK

SESJA 1

1

LOCK TABLES tab WRITE; UPDATE tab SET k1='abc' WHERE id=1; SELECT * FROM tab;

2 3

use test;

6 7 DROP TABLE tab;

SELECT * FROM tab;

UNLOCK TABLES; LOCK TABLES tab READ; SELECT * FROM tab;

4 5

SESJA 2

SELECT * FROM tab; UPDATE tab SET k2=2 WHERE id=2; UNLOCK TABLES; SELECT * FROM tab;

SELECT * FROM tab;

-- sprzątamy po sobie

6. Zakleszczenie tabel – ma miejsce, gdy 2 użytkowników jednocześnie modyfikuje dane w tej samej tabeli. Może się wtedy zdarzyć sytuacja, w której jeden użytkownik będzie czekać na zakończenie transakcji drugiego, podczas gdy drugi będzie czekać na zakończenie transakcji pierwszego. MySQL automatycznie rozpoznaje takie sytuacje i anuluje transakcję, która bezpośrednio doprowadziła do zakleszczenia. PRZYKŁAD: USE test; DROP TABLE IF EXISTS tab; CREATE TABLE tab ( id INT PRIMARY KEY AUTO_INCREMENT, k1 VARCHAR(20), k2 FLOAT ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO tab (k1) VALUES ('aaa'), ('bbb'); SELECT * FROM tab;

KROK 1 KROK 2 KROK 3 DROP TABLE tab;

SESJA 1

SESJA 2

START TRANSACTION; UPDATE tab SET k2=11 WHERE id=1; SELECT * FROM tab; UPDATE tab SET k2=12 WHERE id=2; COMMIT; SELECT * FROM tab;

use test; START TRANSACTION; UPDATE tab SET k2=22 WHERE id=2; SELECT * FROM tab; UPDATE tab SET k2=21 WHERE id=1; SELECT * FROM tab;

-- sprzątamy po sobie

Po wykonaniu powyższego ćwiczenia w sesji, która KROK 2 wykona jako druga, wystąpi błąd: ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

Stało się tak, ponieważ nastąpiło zakleszczenie tabel. Serwer MySQL rozwiązuje tą patową sytuację poprzez przerwanie transakcji, ale tylko w sesji, która do tego doprowadziła.

Pytania kontrolne

Zadania

1. 2.

1. 2. 3. 4.

3. 4. 5.

Po co i w jaki sposób blokuje się tabele? W jaki sposób zapewniamy izolację danych w tabelach z obsługą transakcji? Jakie są domyślne ustawienia izolowania danych podczas transakcji? W jaki sposób zapewniamy izolację danych w tabelach bez obsługi transakcji? Na czym polega zakleszczenie tabel i kiedy do niego dochodzi?

Wykonaj przykład z punktu 3 – można robić to w 3-osobowych grupach. Wykonaj przykład z punktu 3, zmieniając silnik tabeli z „InnoDB” na „MyISAM”. Wykonaj przykład z punktu 5 – można robić to w 2-osobowych grupach. Wykonaj przykład z punktu 6 – można robić to w 2-osobowych grupach.

E.14.2 - SQL - [23-07] Blokowanie tabel.pdf

E.14.2 - SQL - [23-07] Blokowanie tabel.pdf. E.14.2 - SQL - [23-07] Blokowanie tabel.pdf. Open. Extract. Open with. Sign In. Main menu. Displaying E.14.2 - SQL ...

128KB Sizes 0 Downloads 90 Views

Recommend Documents

2307.pdf
Page 1 of 5. ,ifrJl* drE.rqgs p+Ji! rlridl t*. i+;-atb6e. OI9JJJ Z..ol-:,!l Zq;dl. ntlt,,-rrl Zr_l.l-. Kurdistan Regional Government. Council of Ministers. Ministry of Education. Et* - 6tittia2gS s;S u. i:b-*t a)l .t?'tt \. o\03)L-J" u-301$og. it/|:l

2307-2017-oaed-10000-anergoi-55-67.pdf
τογενή παραγωγή γεωργικών προϊόντων. Page 3 of 12. 2307-2017-oaed-10000-anergoi-55-67.pdf. 2307-2017-oaed-10000-anergoi-55-67.pdf. Open. Extract.

SQL Server 2012 Tutorials - Writing Transact-SQL Statements.pdf ...
express, statutory, or implied warranties. Neither the authors, Microsoft Corporation, nor its resellers, or distributors will. be held liable for any damages caused or alleged to be caused either directly or indirectly by this book. Page 3 of 21. SQ

pdf-1234\inside-microsoft-sql-server-2005-t-sql ...
... apps below to open or edit this item. pdf-1234\inside-microsoft-sql-server-2005-t-sql-program ... -learning-by-itzik-ben-gan-dejan-sarka-roger-wolter.pdf.

pdf-1885\sql-server-t-sql-recipes.pdf
Download. Connect more apps... Try one of the apps below to open or edit this item. pdf-1885\sql-server-t-sql-recipes.pdf. pdf-1885\sql-server-t-sql-recipes.pdf.