Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałAsia Kołak Został zmieniony 11 lat temu
1
Bazy danych 10. Z łą czenia i transakcje P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ semestr letni 2004/05
2
Bazy danych - wykład 102 Z łą czenia gdy potrzebujemy informacji z kilku powi ą zanych tabel SELECT T 1.A 1, T 1.A 2, T 2.B 1 FROM T 1 JOIN T 2 ON WHERE ; nazwa_tabeli. nazwa_kolumny
3
Bazy danych - wykład 103 Przyk ł ad Faktury(NrFaktury, NrDostawcy, Kwota, …) Dostawcy(NrDostawcy, Nazwa, NrKonta, …) SELECT Kwota, NrKonta FROM Faktury JOIN Dostawcy ON Faktury.NrDostawcy=Dostawcy.NrDostawcy WHERE NrFaktury=12345; SELECT Kwota, NrKonta FROM Faktury NATURAL JOIN Dostawcy WHERE NrFaktury=12345; równo ść powtarzaj ą cych si ę kolumn
4
Bazy danych - wykład 104 mysql> CREATE TABLE Faceci -> (Nr SMALLINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, -> Imie VARCHAR(16), -> Wiek SMALLINT UNSIGNED) -> ENGINE=InnoDB; Query OK, 0 rows affected (0.11 sec) Dla MySQL! mysql> CREATE TABLE Kobiety -> LIKE Faceci; Query OK, 0 rows affected (1.19 sec) mysql> DESCRIBE Kobiety; +-------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+----------------------+------+-----+---------+----------------+ | Nr | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | Imie | varchar(16) | YES | | NULL | | | Wiek | smallint(5) unsigned | YES | | NULL | | +-------+----------------------+------+-----+---------+----------------+ 3 rows in set (0.19 sec) Nowa tabela utworzona na wzór starej, z dziedziczeniem nazw i w ł a ś ciwo ś ci kolumn etc. wykorzystamy to za chwil ę
5
Bazy danych - wykład 105 mysql> SELECT * FROM Faceci ORDER BY Imie ASC, Wiek DESC; +----+--------+------+ | Nr | Imie | Wiek | +----+--------+------+ | 4 | George | 17 | | 3 | Harry | 31 | | 1 | John | 24 | | 5 | John | 21 | | 6 | Keith | 30 | | 2 | Peter | 28 | +----+--------+------+ 6 rows in set (0.00 sec) mysql> SELECT * FROM Kobiety ORDER BY Imie; +----+----------+------+ | Nr | Imie | Wiek | +----+----------+------+ | 2 | Ann | 23 | | 6 | Beth | 30 | | 1 | Betty | 17 | | 4 | Joan | 31 | | 5 | Margaret | 29 | | 7 | Meredith | 33 | | 8 | Scarlet | 19 | | 3 | Susan | 24 | +----+----------+------+ 8 rows in set (0.00 sec)
6
Bazy danych - wykład 106 mysql> SELECT Faceci.Imie AS Pan, Faceci.Wiek AS WiekPana, -> Kobiety.Imie AS Pani, Kobiety.Wiek AS WiekPani -> FROM Faceci NATURAL JOIN Kobiety; Empty set (0.01 sec) mysql> SELECT Kobiety.Imie AS Pani, Faceci.Imie AS Pan -> FROM Kobiety JOIN Faceci ON Kobiety.Nr=Faceci.Nr; +----------+--------+ | Pani | Pan | +----------+--------+ | Betty | John | | Ann | Peter | | Susan | Harry | | Joan | George | | Margaret | John | | Beth | Keith | +----------+--------+ 6 rows in set (0.01 sec) Zbiór pusty, bo z łą czenie naturalne wymaga ł oby równo ś ci wszystkich trzech kolumn
7
Bazy danych - wykład 107 mysql> SELECT Faceci.Imie AS Pan, Faceci.Wiek AS WiekPana, -> Kobiety.Imie AS Pani, Kobiety.Wiek AS WiekPani -> FROM Faceci JOIN Kobiety ON Faceci.Wiek < Kobiety.Wiek -> ORDER BY WiekPana, Pan, WiekPani; +--------+----------+----------+----------+ | Pan | WiekPana | Pani | WiekPani | +--------+----------+----------+----------+ | George | 17 | Scarlet | 19 | | George | 17 | Ann | 23 | | George | 17 | Susan | 24 | | George | 17 | Margaret | 29 | | George | 17 | Beth | 30 | | George | 17 | Joan | 31 | | George | 17 | Meredith | 33 |........................................... | Peter | 28 | Margaret | 29 | | Peter | 28 | Beth | 30 | | Peter | 28 | Joan | 31 | | Peter | 28 | Meredith | 33 | | Keith | 30 | Joan | 31 | | Keith | 30 | Meredith | 33 | | Harry | 31 | Meredith | 33 | +--------+----------+----------+----------+ 24 rows in set (0.01 sec)
8
Bazy danych - wykład 108 Prawe z łą czenie SELECT … FROM T 1 RIGHT JOIN T 2 ON WHERE ; Prawie jak zwyk ł e z łą czenie, z tym, ż e wiersze z prawej tabeli nie maj ą ce odpowiedników w lewej tabeli s ą uzupe ł niane warto ś ciami NULL Kolejno ść tabel jest istotna!
9
Bazy danych - wykład 109 mysql> SELECT * FROM -> Faceci RIGHT JOIN Kobiety -> ON Faceci.Nr = Kobiety.Nr; +------+--------+------+----+----------+------+ | Nr | Imie | Wiek | Nr | Imie | Wiek | +------+--------+------+----+----------+------+ | 1 | John | 24 | 1 | Betty | 17 | | 2 | Peter | 28 | 2 | Ann | 23 | | 3 | Harry | 31 | 3 | Susan | 24 | | 4 | George | 17 | 4 | Joan | 31 | | 5 | John | 21 | 5 | Margaret | 29 | | 6 | Keith | 30 | 6 | Beth | 30 | | NULL | NULL | NULL | 7 | Meredith | 33 | | NULL | NULL | NULL | 8 | Scarlet | 19 | +------+--------+------+----+----------+------+ 8 rows in set (0.07 sec)
10
Bazy danych - wykład 1010 mysql> SELECT * FROM -> Kobiety RIGHT JOIN Faceci -> ON Faceci.Nr = Kobiety.Nr; +------+----------+------+----+--------+------+ | Nr | Imie | Wiek | Nr | Imie | Wiek | +------+----------+------+----+--------+------+ | 1 | Betty | 17 | 1 | John | 24 | | 2 | Ann | 23 | 2 | Peter | 28 | | 3 | Susan | 24 | 3 | Harry | 31 | | 4 | Joan | 31 | 4 | George | 17 | | 5 | Margaret | 29 | 5 | John | 21 | | 6 | Beth | 30 | 6 | Keith | 30 | +------+----------+------+----+--------+------+ 6 rows in set (0.00 sec)
11
Bazy danych - wykład 1011 mysql> SELECT Kobiety.* -> FROM Kobiety JOIN Faceci ON Kobiety.Nr = Faceci.Nr -> WHERE Faceci.Nr IS NULL; Empty set (0.04 sec) mysql> SELECT Kobiety.* -> FROM Kobiety LEFT JOIN Faceci ON Kobiety.Nr = Faceci.Nr -> WHERE Faceci.Nr IS NULL; +----+----------+------+ | Nr | Imie | Wiek | +----+----------+------+ | 7 | Meredith | 33 | | 8 | Scarlet | 19 | +----+----------+------+ 2 rows in set (0.00 sec) Konstrukcje JOIN i LEFT JOIN s ą cz ę sto traktowane jako synonimy, ale to nieprawda: Je ż eli w tabeli znajduj ą cej si ę po prawej stronie ON w konstrukcji LEFT JOIN nie ma ż adnych wierszy, dla prawej tabeli u ż yty zostanie wiersz z samymi warto ś ciami NULL; Znajd ź wiersze tabeli Kobiety nie maj ą ce odpowiedników w tabeli Faceci
12
Bazy danych - wykład 1012 And now for something completely different…
13
Bazy danych - wykład 1013 Transakcje Pojedynczy u ż ytkownik: 1. Ochrona szczególnie wa ż nych fragmentów – albo wykonuj ą si ę w ca ł o ś ci, albo wcale. System wielodost ę pny: 1.(jak wy ż ej) 2. Ró ż ne procesy klienckie odwo ł uj ą ce si ę do tej samej bazy (tabeli) nie mog ą si ę ze sob ą k ł oci ć. Np. przy przelewie pieni ę dzy z konta A na konto B trzeba zmodyfikowa ć salda obu kont.
14
Bazy danych - wykład 1014 Zasady ACID Atomicity – atomowość. Consistence – spójność. Isolation – izolacja. Durability – trwałość.
15
Bazy danych - wykład 1015 Wielodost ę p co mo ż e pój ść ź le? 1.Niespójno ść odczytów jedna transakcja mo ż e odczyta ć dane zmieniane przez drug ą transakcj ę, chocia ż transakcja ta nie zatwierdzi ł a jeszcze zmian. 2.Niepowtarzalno ś c odczytów transakcja odczytuje dane, nieco pó ź niej odczytuje je ponownie, a odczytane dane s ą inne, mimo i ż transakcja odczytuj ą ca nie zosta ł a jeszcze zatwierdzona. 3.Odczyty fantomowe jedna tabela dodaje wiersz, druga transakcja aktualizuje wiersze. Nowy wiersz powinien by ć zaktualizowany, a nie jest.
16
Bazy danych - wykład 1016 Poziomy izolacji ANSI Poziom izolacjiNiespójno ść odczytów Niepowtarzalno ść odczytów Odczyty fantomowe Read uncommitted OK Read committed NieOK Repeatable read Nie OK SerializableNie W MySQL ignorowane
17
Bazy danych - wykład 1017 Jak to robimy w SQL? BEGIN WORK; zapytanie 1 ; zapytanie 2 ; … zapytanie N ; COMMIT; Zmiany zostają zatwierdzone BEGIN WORK; zapytanie 1 ; zapytanie 2 ; … zapytanie N ; ROLLBACK; Zmiany zostają odwołane MySQL: SET AUTOCOMMIT=1; wszystkie instrukcje zatwierdzane automatycznie; SET AUTOCOMMIT=0; wszystko trzeba jawnie zatwierdza ć ; Transakcje tylko dla tabel InnoDB!
18
Bazy danych - wykład 1018 Ryzyko zwi ą zane z transakcjami Długo działające transakcje blokują dostęp innych użytkowników do danych, na których działa transakcja, dopóki nie zostanie ona zatwierdzona lub odwołana. Należy unikać transakcji wtedy, gdy wymagana jest interakcja z użytkownikiem – nalezy najpierw zebrać wszytskie dane, a dopiero potem rozpoczynać transakcji
19
Bazy danych - wykład 1019 (B)lokowanie tabel LOCK TABLES nazwa tabeli [READ | WRITE]; –Blokowanie w trybie READ chc ę czyta ć tabel ę i w tym czasie nie zezwalam innym na zapis; –Blokowanie w trybie WRITE chc ę zmienia ć zawarto ść tabeli i w tym czasie nie zezwalam innym ani na zapis, ani na odczyt; Zastrze ż enia takie same, jak dla transakcji: nie blokowa ć zbyt d ł ugo i niepotrzebnie. UNLOCK TABLES; zwalnia wszytskie zablokowane tabele.
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.