Bazy danych 7. Klucze obce Transakcje. P. F. Góra

Podobne dokumenty
Bazy danych 9. SQL Klucze obce Transakcje

Bazy danych 9. Klucze obce Transakcje. P. F. Góra

Bazy danych 9. Klucze obce Transakcje

Bazy danych 6. Klucze obce. P. F. Góra

Bazy danych 6a. Transakcje. P. F. Góra

Transakcje jednocześnie ACID

Bazy danych wykład dziewiaty Transakcje. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

Bazy danych 10. SQL Widoki

Wykład 8. SQL praca z tabelami 5

Internetowe bazy danych

Język SQL, zajęcia nr 2

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

Ustawienie na poziomie sesji (działa do zmiany lub zakończenia sesji zamknięcia połączenia).

1 Przetwarzanie transakcyjne Cechy transakcji Rozpoczęcie i zakończenie Punkty bezpieczeństwa... 3

Bazy danych 7. SQL podstawy

przykłady problemów; realizacja dostaw części od producenta do klienta:

BAZY DANYCH. Transakcje. opracowanie: Michał Lech

Autor: Joanna Karwowska

I. Język manipulowania danymi - DML (Data Manipulation Language). Polecenia INSERT, UPDATE, DELETE

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Wykład V. Indeksy. Struktura indeksu składa się z rekordów o dwóch polach

Aspekty aktywne baz danych

Oracle PL/SQL. Paweł Rajba.

Bazy danych i usługi sieciowe

Bazy danych wykład szósty Więzy i wyzwalacze. Konrad Zdanowski ( Uniwersytet Kardynała Stefana Bazy danych Wyszyńskiego, wykładwarszawa)

Właściwości transakcji

Bazy danych i usługi sieciowe

Bazy Danych i Usługi Sieciowe

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

Bazy danych 8. Widoki i wyzwalacze. P. F. Góra

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Bazy danych - Materiały do laboratoriów VIII

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

Transakcje. (c) Instytut Informatyki Politechniki Poznańskiej

Wprowadzenie do projektowania i wykorzystania baz danych. Katarzyna Klessa

UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

Wykład 5. SQL praca z tabelami 2

Wyzwalacze (triggery) Przykład

Bazy danych. Andrzej Łachwa, UJ, /15

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

Literatura: SQL Ćwiczenia praktyczne Autor: Marcin Lis Wydawnictwo: Helion. Autor: Joanna Karwowska

Typy tabel serwera MySQL

Kopie bezpieczeństwa NAPRAWA BAZ DANYCH

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Oracle PL/SQL. Paweł Rajba.

SELECT * FROM tabela WHERE warunek wybiera dane spełniające podany warunek

Plan ćwiczenia. Rozdział 17. zarządzania współbieżnością. Dostęp współbieżny a dostęp spójny. Spójność bazy danych

Bazy danych 4. SQL podstawy. P. F. Góra

1 Zaznacz poprawne stwierdzenia dotyczące grup plików (filegroup) możemy określić do której grupy plików trafi

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Bazy danych 5. Samozłaczenie SQL podstawy

SQL :: Data Definition Language

Język SQL, zajęcia nr 1

Transakcyjne przetwarzanie danych

E.14 Bazy Danych cz. 15 SQL Transakcyjne przetwarzanie danych

SQL/MySQL. Rafał Kern

Sprawdzenie poziomu izolacji transakcji (w aktualnym połączeniu):

LAB 6 BEGIN TRANSACTION, COMMIT, ROLLBACK, SET TRANSACTION ISOLATION LEVEL,

Kowalski Marcin Wrocław, dn Jaśkiewicz Kamil Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Zarządzanie obiektami bazy danych Oracle11g

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki Instrukcja do zajęć laboratoryjnych

Transakcje W poprzednich częściach instrukcje języka SQL traktowane były jak indywidualne operacje (transakcje)

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Paweł Rajba

Cele. Definiowanie wyzwalaczy

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

SIECI KOMPUTEROWE I BAZY DANYCH

Bazy Danych. Ćwiczenie 13: transakcje w bazach danych

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

Administracja i programowanie pod Microsoft SQL Server 2000

Zarządzanie transakcjami

SQL DDL DML TECHNOLOGIE BAZ DANYCH. Wykład 5: Język DDL i DML. Małgorzata Krętowska

P o d s t a w y j ę z y k a S Q L

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Wprowadzenie do BD Operacje na bazie i tabelach Co poza zapytaniami? Algebra relacji. Bazy Danych i Systemy informacyjne Wykład 2.

Rozdział 17. Zarządzanie współbieżnością zadania dodatkowe

Bazy danych 4. SQL- podstawy

Bazy danych 2. Wykład 6 Transakcje

Tworzenie tabeli przez select CREATE TABLE PRAC2 AS SELECT P.NAZWISKO, Z.NAZWA FROM PRAC P NATURAL JOIN ZESP Z

Oracle11g: Wprowadzenie do SQL

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki Instrukcja do zajęć laboratoryjnych

Imię i Nazwisko Data Ocena. Laboratorium 7

Wykład :45 BD-1 W_3

I. Techniki wielowersyjne sterowania współbieżnością

Instytut Mechaniki i Inżynierii Obliczeniowej fb.com/groups/bazydanychmt/

Projektowanie systemów baz danych

Używany kiedy pełna treść instrukcji SQL jest nieznana przed uruchomieniem programu.

Plan bazy: Kod zakładający bazę danych: DROP TABLE noclegi CASCADE; CREATE TABLE noclegi( id_noclegu SERIAL NOT NULL,

Bazy danych 2. Wykład 5 Structured Query Language (SQL) c.d. DDL

Kurs. Podstawy MySQL

Bazy danych 7. Widoki i wyzwalacze. P. F. Góra

Bazy danych 11. SQL Procedury składowane, kursory i wyzwalacze

070 TRANSAKCJE. Prof. dr hab. Marek Wisła

Wykład 05 Bazy danych

Transkrypt:

Bazy danych 7. Klucze obce Transakcje P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ 2011

Dygresja: Metody przechowywania tabel w MySQL Tabele w MySQL moga być przechowywane na kilka sposobów. Sposób ten (żargonowo: silnik, engine) jest definiowany przy zakładaniu tabeli. Najważniejsze dwa sposoby to 1. MyISAM domyślny (natywny) system MySQL. Dostęp do tabel jest szybki, ale sposób ten nie realizuje niektórych rzeczy zdefiniowanych w standardzie SQL, w szczególności nie obsługuje mechanizmu kluczy obcych ani transakcji, co jest przedmiotem niniejszego wykładu. 2. InnoDB dostęp do tabel może być wyraźnie wolniejszy, ale ten sposób pozwala na stosowanie kluczy obcych i transakcji. CREATE TABLE Fubar(...) ENGINE=InnoDB; Copyright c 2009-11 P. F. Góra 2

Klucze obce Klucze obce powiazanie indeksowanej kolumny jakiejś tabeli z indeksowana kolumna innej tabeli, co pozwala na automatyczne dokonywanie zmian w powia- zanych tabelach lub uniemożliwia dokonanie zmian naruszajacych ograniczenia. Uwaga: To jest bardzo wygodne, ale bardzo niebezpieczne! A poza tym spowalnia działanie bazy. Mechanizm kluczy obcych jest sposobem na realizację w SQL więzów integralności referencyjnej. W MySQL działa tylko dla tabel InnoDB. Copyright c 2009-11 P. F. Góra 3

Składnia FOREIGN KEY (nazwa_kolumny_indeksowanej,...) REFERENCES nazwa_tabeli (nazwa_kolumny_indeksowanej,...) [ON DELETE {RESTRICT CASCADE SET NULL NO ACTION}] [ON UPDATE {RESTRICT CASCADE SET NULL NO ACTION}] Copyright c 2009-11 P. F. Góra 4

Znaczenie ON DELETE przy usuwaniu krotki sprawdza stan tabel powiazanych i określa, co się z nimi dzieje. ON UPDATE przy modyfikacji krotki (atrybutu wchodzacego w skład klucza obcego) sprawdza stan tabel powiazanych i określa, co się z nimi dzieje. RESTRICT nie pozwala na dokonanie zmian naruszajacych powiazanie. CASCADE nakazuje zmianom na propagację kaskadowa wzdłuż drzewa powiazanych tabel (potencjalnie bardzo niebezpieczne przy usuwaniu krotek!). SET NULL ustawia odpowiednie atrybuty powiazanych tabel, dotad wskazujace na usuwany/modyfikowany element klucza obcego, na wartość NULL, jeśli definicja tabeli to dopuszcza. NO ACTION wyłacza mechanizm klucza obcego dla danej operacji. Copyright c 2009-11 P. F. Góra 5

Przykład mysql> CREATE TABLE X -> (IdX TINYINT UNSIGNED NOT NULL PRIMARY KEY) -> ENGINE=InnoDB; Query OK, 0 rows affected (0.16 sec) mysql> CREATE TABLE Y -> (IdY CHAR(1) NOT NULL PRIMARY KEY, -> IdX TINYINT UNSIGNED NOT NULL, -> INDEX (IdX), -> FOREIGN KEY (IdX) REFERENCES X (IdX) -> ON DELETE CASCADE -> ON UPDATE CASCADE) -> ENGINE=InnoDB; Query OK, 0 rows affected (0.22 sec) Copyright c 2009-11 P. F. Góra 6

mysql> SELECT * FROM Y; +-----+-----+ IdY IdX +-----+-----+ A 1 B 2 C 3 D 3 E 5 +-----+-----+ 5 rows in set (0.07 sec) mysql> UPDATE X Set IdX=9 WHERE IdX=2; Query OK, 1 row affected (1.19 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT * FROM Y; +-----+-----+ IdY IdX +-----+-----+ A 1 C 3 D 3 E 5 B 9 +-----+-----+ 5 rows in set (0.00 sec) Copyright c 2009-11 P. F. Góra 7

mysql> DELETE FROM X WHERE IdX=3; Query OK, 1 row affected (0.07 sec) mysql> SELECT * FROM Y; +-----+-----+ IdY IdX +-----+-----+ A 1 E 5 B 9 +-----+-----+ 3 rows in set (0.00 sec) Copyright c 2009-11 P. F. Góra 8

Przykład 2 mysql> CREATE TABLE Up -> (Nr SMALLINT UNSIGNED NOT NULL PRIMARY KEY, -> A CHAR(1) NOT NULL, -> INDEX(A)) -> ENGINE=InnoDB; Query OK, 0 rows affected (0.44 sec) mysql> CREATE TABLE Down -> (Lp SMALLINT UNSIGNED NOT NULL PRIMARY KEY, -> A CHAR(1), -> B CHAR(1), -> INDEX(A,B), -> FOREIGN KEY (A) REFERENCES Up (A) -> ON DELETE RESTRICT -> ON UPDATE SET NULL) -> ENGINE=InnoDB; Query OK, 0 rows affected (0.34 sec) W tabeli Down indeks założony jest na dwóch kolumnach. Jeśli tylko jedna z nich wchodzi do klucza obcego, musi to być pierwsza kolumna. Copyright c 2009-11 P. F. Góra 9

mysql> SELECT * FROM Up; +----+---+ Nr A +----+---+ 1 a 2 b 3 b 4 w 5 z +----+---+ 5 rows in set (0.09 sec) mysql> SELECT * FROM Down ORDER BY Lp; +----+------+------+ Lp A B +----+------+------+ 1 z P 2 w Q 3 b R 4 b S 5 b T 6 a U +----+------+------+ 6 rows in set (0.01 sec) Copyright c 2009-11 P. F. Góra 10

mysql> INSERT INTO Down VALUES (7, c, X ); ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails ( klucze/down, CONSTRAINT down_ibfk_1 FOREIGN KEY ( A ) REFERENCES up ( A ) ON UPDATE SET NULL) Dodanie nowego wiersza do Down nie powiodło się, gdyż w Up nie ma wiersza zawierajacego c. mysql> DELETE FROM Up WHERE A= w ; ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails ( klucze/down, CONSTRAINT down_ibfk_1 FOREIGN KEY ( A ) REFERENCES up ( A ) ON UPDATE SET NULL) Usunięcie wiersza z Up nie udało się, gdyż Down zawiera wiersz z w. Copyright c 2009-11 P. F. Góra 11

mysql> UPDATE Up SET A= w WHERE A= b ; Query OK, 2 rows affected (0.04 sec) Rows matched: 2 Changed: 2 Warnings: 0 mysql> SELECT * FROM Up; +----+---+ Nr A +----+---+ 1 a 2 w 3 w 4 w 5 z +----+---+ 5 rows in set (0.00 sec) mysql> SELECT * FROM Down ORDER BY Lp; +----+------+------+ Lp A B +----+------+------+ 1 z P 2 w Q 3 NULL R 4 NULL S 5 NULL T 6 a U +----+------+------+ 6 rows in set (0.00 sec) Pola tabeli Down, zawierajace dotad wartości b, zostały ustawione na NULL. Copyright c 2009-11 P. F. Góra 12

Przywracam tabelom Up, Down pierwotna zawartość i uruchamiam zapytanie mysql> UPDATE Up SET A= w WHERE Nr=3; Query OK, 1 row affected (0.10 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT * FROM Up; +----+---+ Nr A +----+---+ 1 a 2 b 3 w 4 w 5 z +----+---+ 5 rows in set (0.00 sec) mysql> SELECT * FROM Down ORDER BY Lp; +----+------+------+ Lp A B +----+------+------+ 1 z P 2 w Q 3 NULL R 4 NULL S 5 NULL T 6 a U +----+------+------+ 6 rows in set (0.00 sec) Copyright c 2009-11 P. F. Góra 13

W tabeli Down wszystkie b zostały zamienione na NULL, mimo iż w tabeli Up pozostała jedna wartość b. Wynika to z zasady przeszukiwania indeksu: Warunek ON UPDATE odpala, gdy zostanie znaleziona choć jedna pasujaca wartość, bez sprawdzania, czy sa jakieś inne krotki o tej samej wartości zmienianego atrybutu. Copyright c 2009-11 P. F. Góra 14

Ograniczenia zapętlone Czasami potrzebna jest sytuacja, w której pierwsza tabela odwołuje się do drugiej, druga zaś do pierwszej. Klucze obce można definiować tylko w odniesieniu do istniejacych kolumn w istniejacych tabelach. Jak obejść ten problem? mysql> CREATE TABLE Jeden -> (A SMALLINT UNSIGNED NOT NULL PRIMARY KEY, -> B CHAR(1) NOT NULL, -> INDEX(B)) -> ENGINE=InnoDB; Query OK, 0 rows affected (1.24 sec) mysql> CREATE TABLE Dwa -> (B CHAR(1) NOT NULL PRIMARY KEY, -> A SMALLINT UNSIGNED NOT NULL, -> INDEX(A), -> FOREIGN KEY (A) REFERENCES Jeden (A) -> ON DELETE RESTRICT -> ON UPDATE CASCADE) -> ENGINE=InnoDB; Query OK, 0 rows affected (1.25 sec) Copyright c 2009-11 P. F. Góra 15

mysql> ALTER TABLE Jeden -> ADD CONSTRAINT -> FOREIGN KEY (B) REFERENCES Dwa (B) -> ON DELETE RESTRICT -> ON UPDATE CASCADE; Query OK, 0 rows affected (1.43 sec) Records: 0 Duplicates: 0 Warnings: 0 Ale z tak zapętlonymi tabelami będzie sporo problemów Copyright c 2009-11 P. F. Góra 16

Dygresja - funkcja CASE Funkcja CASE służy do kontroli przepływu. W SQL ma dwie postacie. Pierwsza postać: CASE wartość WHEN wartość-porównywana THEN wynik WHEN wartość-porównywana THEN wynik... END Druga postać: CASE WHEN warunek THEN wynik WHEN warunek THEN wynik... ELSE wynik END Klauzula ELSE jest opcjonalna. Copyright c 2009-11 P. F. Góra 17

mysql> SELECT * FROM Litery; +--------+--------+ litera liczba +--------+--------+ A 1 B 2 C 3 D 4 E 5 F 6 G 7 H 8 I 14 J 15 K 6 +--------+--------+ 11 rows in set (0.01 sec) mysql> SELECT CASE litera -> WHEN A THEN A -> WHEN B THEN Be -> WHEN C THEN Ce -> WHEN D THEN De -> WHEN E THEN E -> WHEN F THEN Ef -> WHEN G THEN Gie -> WHEN I THEN I -> WHEN J THEN Jot -> END AS Nazwa Litery -> From Litery; +--------------+ Nazwa Litery +--------------+ A Be Ce De E Ef Gie NULL I Jot NULL +--------------+ 11 rows in set (0.00 sec) Copyright c 2009-11 P. F. Góra 18

mysql> SELECT CASE -> WHEN litera < D THEN niska -> WHEN litera > H THEN wysoka -> ELSE inna -> END AS Jaka Litera -> FROM Litery; +-------------+ Jaka Litera +-------------+ niska niska niska inna inna inna inna inna wysoka wysoka wysoka +-------------+ 11 rows in set (0.00 sec) Copyright c 2009-11 P. F. Góra 19

Transakcje Pojedynczy użytkownik ochrona szczególnie wrażliwych fragmentów. Transakcja wykonuje się albo w całości, albo wcale. Jeżeli w trakcie wykonywania transakcji wystapi jakiś bład, cała sekwencję operacji można odwołać, przywracajac bazę do stanu sprzed rozpoczęcia tej sekwencji. System wielodostępny 1. Jak wyżej. 2. Różne procesy klienckie odwołujace się do tych samych tabel nie moga się ze soba kłócić. Copyright c 2009-11 P. F. Góra 20

Zasady ACID (T. Hearder, A. Reuter, 1983) A Atomicity atomowość. Transakcja jest niepodzielna, albo wszystko, albo nic. C Consistency spójność. Transakcja nie może naruszać integralności danych (więzów narzuconych na dane w tabelach). I Isolation izolacja. Jedna transakcja nie może widzieć wyników działania jakiejś innej, niezatwierdzonej transakcji. Można powiedzieć, że transkacja musi odbywać się tak, jakby żadna inna transakcja nie miała miejsca w tym samym czasie. D Durability trwałość. Zmiany wprowadzone w transakcji musza być trwałe, niezależnie od możliwych późniejszych błędów sprzętu lub oprogramowania. Copyright c 2009-11 P. F. Góra 21

Jak to robimy w SQL? START TRANSACTION; START TRANSACTION; zapytanie 1 ; zapytanie 1 ; zapytanie 2 ; zapytanie 2 ;...... zapytanie N ; zapytanie N ; COMMIT; ROLLBACK; Zmiany zostaja zatwierdzone Zmiany zostaja odwołane Copyright c 2009-11 P. F. Góra 22

Wielodostępność co może pójść źle? 1. Niespójność odczytów jedna transakcja może odczytać dane zmieniane przez druga transakcję, chociaż transakcja ta nie zatwierdziła jeszcze zmian. 2. Niepowtarzalność odczytów transakcja odczytuje dane, nieco później odczytuje je ponownie, a odczytane dane sa inne, mimo iż transakcja odczytujaca nie została jeszcze zatwierdzona. 3. Odczyty fantomowe jedna tabela dodaje wiersz, druga transakcja aktualizuje wiersze. Nowy wiersz powinien być zaktualizowany, a nie jest. Copyright c 2009-11 P. F. Góra 23

Jak realizujemy izolację? W celu zapewnienia izolacji w systemie wielodostępnym, transakcje blokuja tabele (fragmenty tabel), które sa im potrzebne. Najczęściej stosowane mechanizmy to: 2PL Strict two-phase locking: Każda transakcja zakłada blokadę na każdy rekord, który chce odczytać, przed dokonaniem odczytu. Blokady do odczytu moga być współdzielone z innymi transakcjami. Każda transakcja zakłada też wyłaczn a blokadę na każdy fragment danych, który chce zapisać. Wszystkie blokady sa utrzymywane aż do zakończenia transakcji. OCC Optimistic Concurrency Control: Wiele transakcji moga odczytywać i modyfikować fragment danych bez zakładania blokad. Transakcje zapamiętuja historię dokonywanych odczytów i zapisów. Przed zatwierdzeniem transakcja sprawdza historię w celu wykrycia ewentualnych konfliktów z innymi Copyright c 2009-11 P. F. Góra 24

transakcjami. Jeśli jakieś konflikty zostana wykryte, jedna z transakcji wywołujacych konflikt zostaje odwołana. Aby zminimalizować blokowanie (i opóźnienie innych transakcji), stosuje się mechanizm OCC. Działa on dobrze gdy konflikty sa rzadkie, ale może jednak wygenerować duży koszt, jeżeli konflikty nie sa rzadkie; w tych wypadkach mechanizm 2PL jest efektywnie szybszy. Copyright c 2009-11 P. F. Góra 25

Poziomy izolacji ANSI Poziom izolacji Niespójność Niepowtarzalność Odczyty odczytów odczytów fantomowe Read uncommitted OK OK OK Read committed NIE OK OK Repeatable read NIE NIE OK Serializable NIE NIE NIE Serializowalność oznacza, że wynik sekwencji przeplatajacych się działań, wykonywanych przez zatwierdzane transakcje, musi ściśle odpowiadać sytuacji, w której wszystkie transakcje wykonywane sa kolejno, jedna po zakończeniu drugiej. Copyright c 2009-11 P. F. Góra 26

Uwaga Instrukcje DDL (Data Description Language), czyli instrukcje tworzace i usuwajace bazy oraz tworzace, usuwajace i modyfukujace tabele nie sa transakcyjne nie można ich wycofać. W MySQL tabele, które chcemy zabezpieczać transakcjami, musza być typu InnoDB. Copyright c 2009-11 P. F. Góra 27

Ryzyko zwiazane z transakcjami 1. Długo działajace transakcje blokuja dostęp innych użytkowników do danych, na których działa transakcja, dopóki nie zostanie ona zatwierdzona lub odwołana. 2. Należy unikać transakcji wtedy, gdy wymagana jest interakcja z użytkownikiem należy najpierw zebrać wszytskie dane, a dopiero potem rozpoczynać transakcję. Copyright c 2009-11 P. F. Góra 28

(B)lokowanie tabel LOCK TABLES nazwa tabeli [READ [LOW PRIORITY] WRITE]; Tryb READ chcę czytać tabelę i w tym czasie nie zezwalam innym na zapis. Tryb WRITE chcę zmieniać zawartość tabeli i w tym czasie nie zezwalam innym ani na zapis, ani na odczyt. Copyright c 2009-11 P. F. Góra 29

Tryb LOW PRIORITY WRITE pozwala innym watkom na założenie blokady READ; w tym czasie watek, który chce nałożyć blokadę LOW PRIORITY WRITE, musi czekać, aż tamten watek zwolni blokadę. UNLOCK TABLES; zwalnia wszystkie zablokowane przez dany watek tabele. Tabel nie należy blokować zbyt długo lub niepotrzebnie. Uwaga praktyczna: Aplikacja powinna najpierw zebrać wszystkie potrzebne dane od użytkownika, później inicjować transakcję lub blokować tabele. Copyright c 2009-11 P. F. Góra 30