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

Podobne dokumenty
Bazy danych 9. SQL Klucze obce Transakcje

Bazy danych 9. Klucze obce Transakcje

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

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

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

Transakcje jednocześnie ACID

Wykład 8. SQL praca z tabelami 5

Bazy danych 10. SQL Widoki

Internetowe bazy danych

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

Język SQL, zajęcia nr 2

Bazy danych 7. SQL podstawy

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

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

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

Autor: Joanna Karwowska

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

BAZY DANYCH. Transakcje. opracowanie: Michał Lech

Bazy danych i usługi sieciowe

Bazy danych - Materiały do laboratoriów VIII

Bazy danych i usługi sieciowe

Bazy Danych i Usługi Sieciowe

Oracle PL/SQL. Paweł Rajba.

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

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

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

Aspekty aktywne baz danych

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

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

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

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

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

Wykład 5. SQL praca z tabelami 2

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

Bazy danych 5. Samozłaczenie SQL podstawy

Wprowadzenie do projektowania i wykorzystania baz danych. Katarzyna Klessa

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

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

Właściwości transakcji

Język SQL, zajęcia nr 1

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

Kopie bezpieczeństwa NAPRAWA BAZ DANYCH

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

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

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

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

SQL/MySQL. Rafał Kern

Typy tabel serwera MySQL

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

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

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

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

Transakcyjne przetwarzanie danych

Wyzwalacze (triggery) Przykład

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

Bazy Danych. Ćwiczenie 13: transakcje w bazach danych

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

Bazy danych. Andrzej Łachwa, UJ, /15

SIECI KOMPUTEROWE I BAZY DANYCH

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

Oracle PL/SQL. Paweł Rajba.

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

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

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

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

Wykład 2. SQL 1 Structured Query Lenguage

Transakcje. (c) Instytut Informatyki Politechniki Poznańskiej

Bazy danych 4. SQL- podstawy

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

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

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Wykład 05 Bazy danych

Paweł Rajba

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

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

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

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

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

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

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

SQL :: Data Definition Language

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

Administracja i programowanie pod Microsoft SQL Server 2000

Projektowanie systemów baz danych

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Zarządzanie transakcjami

Wykład :45 BD-1 W_3

Administracja bazami danych

SQL - DDL. 1 Tabele systemowe. 2 Typy danych

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

Kurs. Podstawy MySQL

Bazy danych. Polecenia SQL

Bazy danych 6. SQL funkcje daty i czasu, zmienne tymczasowe, aliasy

Iwona Milczarek, Małgorzata Marcinkiewicz, Tomasz Staszewski. Poznań,

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

BAZY DANYCH wprowadzenie do języka SQL. Opracował: dr inż. Piotr Suchomski

Bazy danych 2. Wykład 6 Transakcje

Transkrypt:

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

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 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 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 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 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 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 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 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 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 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 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 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 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 P. F. Góra 14

Ograniczenia zapętlone Czasami potrzebna jest sytuacja, w której pierwsza tabela odwołuje się do drugiej, fruga 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 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 P. F. Góra 16

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 P. F. Góra 17

Zasady ACID A Atomicity atomowość. Transakcja jest niepodzielna, albo wszystko, albo nic. C Consistency spójność. Transakcja nie może naruszać integralności danych. I Isolation izolacja. 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. Copyright c 2009 P. F. Góra 18

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 P. F. Góra 19

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 Copyright c 2009 P. F. Góra 20

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 P. F. Góra 21

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 P. F. Góra 22

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 P. F. Góra 23

(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 P. F. Góra 24

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 P. F. Góra 25