2. Wstęp – o czym będzie mowa
Wprowadzenie do MySQL:
System zarządzania bazą danych
Czym jest MySQL
Historia MySQL
Architektura MySQL
Licencja GPL
SQL widziany z punktu widzenia MySQL
Administrowanie MySQL
Ogólne pojęcia (różnica między administratorem
bazy danych a administratorem danych)
Instalowanie i uruchamianie MySQL
Autor: KatMPB
2
3. Wstęp – o czym będzie mowa
Konfigurowanie i zarządzanie uprawnieniami
użytkowników
Tabele do przechowywania uprawnień
Pliki konfiguracyjne
Kopie zapasowe
Dostęp do MySQL z programów napisanych w
języku Java
Dostęp do MySQL z programów napisanych w
języku PHP
Dostęp do MySQL z programów napisanych w
językach C i C++
Transakcje
Autor: KatMPB
3
4. Wprowadzenie do MySQL
System zarządzania bazą danych (DBMS) jest zorganizowanym
zbiorem narzędzi umożliwiającym dostęp i zarządzanie jedną lub
więcej bazami danych. DBMS jest powłoką, która otacza bazę
danych i za pomocą której dokonują się wszystkie operacje na
bazie danych.
Funkcje realizowane przez większość DBMS zaliczamy do trzech
grup:
-pielęgnacja danych
-wyszukiwanie danych
-kontrola danych
Autor: KatMPB
4
5. Wprowadzenie do MySQL
Czym jest MySQL?
Jest to system zarządzania bazą danych oparty na relacyjnym modelu
danych i wykorzystujący standard języka SQL.
(ver 4.0 [4.1] wykorzystuje standard SQL 92).
System działa na na niemal każdej platformie UNIX, w tym systemach
zbliżonych do Uniksa, na przykład Solaris, FreeBSD, czy Linux; działa
również na platformie Windows.
System MySQL jest bezpłatny; można także ściągnąć jego kod źródłowy.
Autor: KatMPB
5
6. Wprowadzenie do MySQL
Historia MySQL
System MySQL powstał w połowie lat dziewięćdziesiątych.
Jego autorem był Michael ‘Monty’ Widenius ze szwedzkiej firmy TcX
DataKonsult AB. Pierwsza powszechnie dostępna wersja została wydana w
maju 1995 roku. (mSQL->MySQL)
Obecnie rozwojem MySQL zajmuje się firma MySQL AB.
Autor: KatMPB
6
7. Wprowadzenie do MySQL
Architektura MySQL
Jest to przykład systemu bazującego na architekturze klient-serwer.
Jeżeli korzystamy z sieci możemy oddzielić programy klienckie od naszego
serwera i tworzyć aplikacje pasujące do środowiska wykorzystywanego
przez użytkownika na przykład Windows czy Linux.
Sercem instalacji MySQL jest proces serwera bazy danych. Jest on
wykonywany na jednym serwerze.
MySQL nie posiada jeszcze funkcji rozproszenie obciążenia na kilka
serwerów, jednak serwer MySQL potrafi korzystać z kilku procesorów
zainstalowanych na jednym komputerze.
Uwaga! - Dla każdego połączenia klient-serwer jest tworzony oddzielny
proces MYSQLD.
Autor: KatMPB
7
9. Wprowadzenie do MySQL
Licencja open source
MySQL jest przykładem otwartego oprogramowania open source.
Termin open source oznacza, że oprogramowanie jest dostarczone wraz z
jego kodem źródłowym. Licencja MySQL-a (GPL – General Public License)
pozwala na jego używanie bez ograniczeń. Jeśli jednak chcemy wbudować
MySQL w swój komercyjny produkt, potrzebna jest osobna licencja.
Autor: KatMPB
9
10. SQL widziany z punktu widzenia
MySQL
Złączenia (klucze obce)
Podzapytania
Indeksy
Integralność danych (integralność: encji,
referencyjna, dziedziny, asercje)
Perspektywy
Procedury serwera STORED PROCEDURES
(funkcje serwera)
Przełączniki typu TRIGGER (wyzwalacze)
Uwaga! - Wszystkie podpunkty będą omówione na przykładach.
Autor: KatMPB
10
11. SQL widziany z punktu widzenia
MySQL
Złączenia (klucze obce)
Aby mówić o kluczach obcych w MySQL tabele muszą być typu InnoDB (od ver 4.0)
create table faktury (
numer int primary key,
dostawca char(32) not null,
data datetime not null default getdate()
) type=InnoDB;
create table pozycje (
nrfaktury int not null,
numer int not null,
towar char(24) not null,
ilosc int not null,
cena money not null,
CONSTRAINT pozycje_faktury FOREIGN KEY (nrfaktury) REFERENCES faktury(numer),
primary key (nrfaktury, numer)
) type=InnoDB;
Autor: KatMPB
11
12. SQL widziany z punktu widzenia
MySQL
Złączenia (klucze obce)
Typy tabel:
- HEAP (brak obsługi transakcji, dane przechowywane w pamięci,
szybki dostęp, są usuwane po zakończeni pracy serwera)
- ISAM
- MyISAM (brak obsługi transakcji, domyślny typ tabel)
- MARGE (brak obsługi transakcji, stosowane do łączenia kilku tabel
w jedną, bardzo duże zbiory danych)
- BDB (obsługa transakcji)
- InnoDB (obsługa transakcji, posiada obsługę mechanizmu
kluczy obcych)
Autor: KatMPB
12
13. SQL widziany z punktu widzenia
MySQL
Złączenia
-Złączenia własne
create table part ( part_id INT, description VARCHAR(32), parent_part_id INT );
insert into part (part_id, description, parent_part_id) values (1, ‘table and chairs’, NULL);
insert into part (part_id, description, parent_part_id) values (2, ‘chair’, 1);
insert into part (part_id, description, parent_part_id) values (3, ‘table’, 1);
select p1.description as „Combined”, p2.description as „Parts” from part p1, part p2
where p1.part_id = p2.parent_part_id;
Autor: KatMPB
13
14. SQL widziany z punktu widzenia
MySQL
Złączenia
-Złączenia zewnętrzne (zostały po raz pierwszy ustandaryzowane w SQL 92)
Niektóre rzadko używane typy tych złączeń nie są używane.
select * from faktury, pozycje where faktury.numer = pozycje.numerf;
select * from faktury LEFT OUTER JOIN pozycje on faktury.numer = pozycje.numerf;
Autor: KatMPB
14
15. SQL widziany z punktu widzenia
MySQL
Podzapytania nie są obsługiwane przez wersje 4.0 włącznie.
Wprowadzono je dopiero od wersji 4.1.
select NazwiskoPrac, NazwaWydziału, Pensja
from Wykładowcy L
where Pensja >
(select avg(Pensja)
from Wykładowcy
where L.NazwaWydziału = NazwaWydziału);
Opis zadania:
Wypisz listę nazwisk pracowników, nazw wydziałów i pensji
wszystkich wykładowców, którzy zarabiają więcej niż wynosi średnia
pensja pracownika ich wydziału.
Autor: KatMPB
15
16. SQL widziany z punktu widzenia
MySQL
Indeksy są niewielką kopią całej tabeli wstępnie posortowaną.
create index nazwa_indeksu on nazwa_tabeli (nazwa_kolumny_1, … );
Autor: KatMPB
16
17. SQL widziany z punktu widzenia
MySQL
Integralność danych
-Integralność encji jest realizowana przez klucze główne
-Integralność referencyjna jest realizowana przez klucze obce
-Integralność dziedziny
create table nazwa (
…
pole int,
…
CHECK (pole BETWEEN 100 AND 1000),
…
)
Klauzula CHECK służy do wymuszenia integralności dziedziny, nie jest
wspierana przez MySQL do ver 4.1 włącznie.
CREATE DOMAIN – polecenie SQL służące do definiowania typów kolumn.
Autor: KatMPB
17
18. SQL widziany z punktu widzenia
MySQL
Integralność danych
-Asercje nie są wspierane przez MySQL do ver 4.1 włącznie.
Więzy mogą być nazywane i określane niezależnie od jakiejkolwiek tabeli
lub dziedziny. W takim przypadku więzy są nazywane asercjami.
Możemy na przykład zdefiniować asercje dla jakieś tabeli i gdy dowolna
instrukcja SQL dokonuje wstawienia, modyfikacji bądź usunięcia wiersza
tabeli, istnieje możliwość, że więzy mogą zostać naruszone.
Sprawdzanie więzów może odbywać się w trybie natychmiastowym bądź
w trybie opóźnionym (na koniec transakcji).
Autor: KatMPB
18
19. SQL widziany z punktu widzenia
MySQL
Perspektywy i procedury serwera (funkcje serwera) są wspierane od
wersji 5.0)
Uwaga! - W związku z tym, że baza danych w wersji 5 znajduje się w fazie
testowej nie będę opisywał zasad tworzenia perspektyw, czy procedur w
MySQL.
Uwaga2! - Programiści z firmy MySQL AB postawili sobie ambitny cel:
mianowicie MySQL w wersji 5 ma wspierać w pełni standard języka SQL
(SQL 92 / SQL 99).
Przełączniki typu TRIGGER (wyzwalacze) będą prawdopodobnie wspierane
od wersji 5.1.
Pisanie procedur czy funkcji składowanych na serwerze odbywa się dzięki
dodatkowej składni SQL wprowadzonej do MySQL, inaczej ma się sprawa w
systemie Oracle gdzie pisanie kodu odbywa się w języku PL/SQL.
Autor: KatMPB
19
20. Administrowanie MySQL
Ogólne pojęcia (różnica między
administratorem bazy danych a
administratorem danych)
Instalowanie i uruchamianie MySQL
Konfigurowanie i zarządzanie uprawnieniami
użytkowników
Tabele do przechowywania uprawnień
Pliki konfiguracyjne
Kopie zapasowe
Autor: KatMPB
20
21. Administrowanie MySQL
Ogólne pojęcia (różnica między administratorem bazy danych a
administratorem danych)
Administrator danych jest to osoba która pełni funkcję nad administrowaniem
danych. Administrowanie danymi jest funkcją związaną z zarządzaniem,
planowaniem i dokumentowaniem zasobów danych w przedsiębiorstwie.
Administrator bazy danych będzie zaangażowany w projektowanie fizyczne
systemów baz danych. W zakresie zarządzania danymi administrator
bazy danych będzie zajmował się zwłaszcza problematyką kontroli danych;
jest on również odpowiedzialny za tworzenie kopii zapasowych baz danych.
Autor: KatMPB
21
22. Administrowanie MySQL
Ogólne pojęcia (różnica między administratorem bazy danych a
administratorem danych)
Głównym narzędziem administratora danych i administratora bazy danych jest
słownik danych.
Słownik danych jest sposobem zapisywania metadanych przedsiębiorstwa, to znaczy
danych na temat danych (koncepcyjne słowniki danych, logiczne słowniki danych
i fizyczne słowniki danych).
Koncepcyjne i logiczne słowniki danych są zazwyczaj domeną administratora danych.
Fizyczne słowniki danych są domeną administratora bazy danych.
Uwaga! – Administrator bazy danych w wielu przypadkach pełni funkcję administratora
danych.
Administrator danych będzie uczestniczył w analizie i projektowaniu systemu baz danych.
Administrator baz danych będzie zaangażowany w projektowanie fizyczne systemów
baz danych.
Autor: KatMPB
22
23. Administrowanie MySQL
Instalowanie i uruchamianie MySQL
System LINIUX:
- Instalowanie MySQL z kodu źródłowego (pozostawiam użytkownikowi).
- Instalowanie MySQL z pakietów binarnych (następny slajd).
Autor: KatMPB
23
24. Administrowanie MySQL
Instalowanie i uruchamianie MySQL z pakietów binarnych (RPM)
Aby utworzyć w pełni działającą instalację należy pobrać i zainstalować
podstawowy pakiet serwera z listy pakietów wymienionych poniżej:
- MySQL.rpm (podstawowy pakiet serwera)
- MySQL-bench.rpm
- MySQL-client.rpm (aplikacja klienta MySQL)
- MySQL.devel.rpm (pliki nagłówkowe i biblioteki niezbędne w programowaniu)
- MySQL-shared.rpm
- MySQL-Max.rpm (wersja serwera mysqld-max)
Polecenie do instalacji pakietów rpm –ivh nazwa_pakietu.rpm.
Autor: KatMPB
24
25. Administrowanie MySQL
Instalowanie i uruchamianie MySQL (LINUX)
Polecenie do jednorazowego uruchamiania i zatrzymywania serwera:
/etc/rc.d/init.d/mysql start
/etc/rc.d/init.d/mysql stop
W czasie uruchamiania MySQL odczytuje plik konfiguracyjny /etc/my.cnf, który
zawiera opcje ustalające sposób pracy serwera.
Ciekawostka! - W przypadku instalacji MySQL z pakietów binarnych domyślnie
serwer jest uruchamiany na 3, 4 i 5 poziomie startowym.
Autor: KatMPB
25
26. Administrowanie MySQL
Instalowanie i uruchamianie MySQL (WINDOWS)
System WINDOWS:
Instalacja jest trywialna .
Ciekawostka! - Domyślnie zainstalowanym serwerem jest serwer MySQL (nie
wersją MAX)
Aby to zmienić wydajemy polecenie mysql.exe -remove, a następnie
mysql-max-nt.exe --install
Autor: KatMPB
26
27. Administrowanie MySQL
Konfigurowanie i zarządzanie uprawnieniami użytkowników
Domyślnie podczas instalacji serwera MySQL tworzone są dwa konta
użytkowników: konto administratora (root) oraz konto anonimowe.
Domyślnie użytkownik root nie ma hasła.
Procedura zmiany hasła użytkownika root:
1. $mysql –u root
2. use mysql;
3. update user set password=PASSWORD(‘tajne’) where user = ‘root’;
4. FLUSH PRIVILEGES;
Uwaga! - Zaraz po zainstalowaniu MySQL zalecane jest usuwanie konta
anonimowego.
Autor: KatMPB
27
28. Administrowanie MySQL
Konfigurowanie i zarządzanie uprawnieniami użytkowników
Tworzenie kont użytkowników (SQL)
GRANT prawo [(lista kolumn)]
ON baza_lub_tabela
TO użytkownik [IDENTIFIED BY ‘hasło’] [with grant option];
FLUSH PRIVILEGES
Przykład!
grant select, insert
on linuxmaniad.*
to katmpb identified by „hasło”
grant all
on linuxmaniad.*
to katmpb@% identified by „hasło”
to katmpb@’%.kattserv.no-ip.com’ identified by „hasło”
Autor: KatMPB
28
29. Administrowanie MySQL
Konfigurowanie i zarządzanie uprawnieniami użytkowników
Dostępne prawa w instrukcji GRANT:
ALL
ALL PRIVILEGES
ALTER
CREATE
DELETE
DROP
FILE – pozwala na dostęp do plików zapisanych na serwerze
INDEX
INSERT
PROCESS – pozwala na przeglądanie informacji o procesie serwera
RELOAD – pozwala na powtórne załadowanie informacji z tabeli uprawnień do serwera
SELECT
SHUTDOWN
UPDATE
USAGE – pozwala na utworzenie konta użytkownika bez żadnych uprawnień
Autor: KatMPB
29
30. Administrowanie MySQL
Konfigurowanie i zarządzanie uprawnieniami użytkowników
Usuwanie kont użytkowników (SQL)
REVOKE prawo [(lista kolumn)]
ON baza_lub_tabela
FROM użytkownik;
FLUSH PRIVILAGES;
Przykład!
revoke select, insert
on linuxmaniad.*
from katmpb@%
Uwaga! – Wykonanie polecenia GRANT i REVOKE powoduje zmiany w tabelach systemowych;
Autor: KatMPB
30
31. Administrowanie MySQL
Tabele do przechowywania uprawnień
Tabele systemowe są zawarte w bazie danych mysql.
Tabelami systemowymi są:
- columns_priv
- db
- func
- host
- tables_priv
- user
Wszystkie powyższe tabele z wyjątkiem func przechowują informacje na temat
przydzielonych przywilejów. (Tabela func przechowuje funkcje zdefiniowane
przez użytkownika).
Autor: KatMPB
31
32. Administrowanie MySQL
Tabele do przechowywania uprawnień
Tabela user zawiera dane o użytkownikach, którzy są uprawnieni do logowania
się do serwera MySQL (uwaga1 do prezentacji). Tabela db i host określają,
które bazy danych mogą być temu użytkownikowi udostępnione (uwaga2 do prezentacji).
Tabela tables_priv zawiera nazwy tych tabel, do których użytkownik ma dostęp,
podobnie tabela columns_priv.
Uwaga! - Kolejność sprawdzania przywilejów jest następująca:
USER->DB->HOST->TABLES_PRIV->COLUMNS_PRIV.
Autor: KatMPB
32
33. Administrowanie MySQL
Pliki konfiguracyjne
MySQL posiada kilka plików pozwalających na ustawienie opcji konfiguracyjnych
serwera. Pliki te umożliwiają również określenie domyślnych parametrów dla
programu mysqld i innych narzędzi dostarczonych wraz z MySQL. Zarówna w
Windowsie (my.cnf i my.ini) jak i Linuxie (my.cnf) zawartość tych plików jest niemal
identyczna.
Uwaga! – Korzystając z plików konfiguracyjnych można ustawić opcje zarówno
dla serwera, jak i dla poszczególnych użytkowników (w systemie Linux).
Autor: KatMPB
33
35. Administrowanie MySQL
Kopie zapasowe
W przypadku tabel MyISAM można tworzyć kopie zapasowe poprzez
zatrzymanie bazy danych i skopiowanie wszystkich plików z katalogu bazy
danych.
W przypadku tabel InnoDB jest nieco inaczej.
Pierwszy sposób:
-
zatrzymanie serwera;
skopiowanie pliku <nazwa_bazy_danych>*.frm;
skopiowanie pliku danych InnoDB;
skopiowanie pliku śladu InnoDB;
uruchomienie serwera.
Autor: KatMPB
35
36. Administrowanie MySQL
Kopie zapasowe
Drugi sposób (zalecany):
Użycie programu mysqldump, który tworzy czytelny plik wynikowy.
Pliki powstałe za jego pomocą można przenosić między systemami
Windows – Linux.
Składnia polecenia:
$mysqldump [OPCJE] baza_danych | --all-databases [tabele]
Przykład!
C:mysqlbinmysqldump --opt --all-databases > backup.sql
/etc/bin/mysqldump –opt –all-databases > backup.sql
Opcja -opt oznacza to samo co:
--quick --add-drop-table --add-locks --extended-insert --lock-tables.
Autor: KatMPB
36
38. Dostęp do MySQL z programów
napisanych w języku Java
Java korzysta z biblioteki (API) dzięki którym możemy skorzystać z
zewnętrznych źródeł danych. Jedną z nich jest JDBC
(Java Database Connectivity) – stała się ona standardową metodą
dostępu do relacyjnych baz danych.
Ważne - aplikacja napisana w języku Java, korzystająca z
standardowych klas i interfejsów JDBC oraz jedynie ze standardu
języka SQL, może być przenoszona pomiędzy bazami danych
korzystającymi z różnych systemów zarządzania relacyjnymi bazami
danych.
Autor: KatMPB
38
39. Dostęp do MySQL z programów
napisanych w języku Java
JDBC zawiera podstawowe API JDBC oraz rozszerzone.
Część podstawowa zawiera interfejsy standardowe zawierające:
- tworzenie połączeń z bazą danych;
- dostęp do wyników zapytań;
- pobieranie metadanych ze zbiorów wynikowych.
(J2SE - część podstawowa, J2EE - część rozszerzona [np. transakcje rozproszone]).
Sterownik JDBC
API biblioteki JDBC definiuje jedynie interfejsy obiektów wykorzystywanych do wykonywania operacji
na bazie danych. Nie zawiera implementacji klas dla tych interfejsów. Implementacje klas JDBC
dostarcza najczęściej producent systemu. Zbiór tych implementacji nazywany jest sterownikiem
JDBC.
Autor: KatMPB
39
40. Dostęp do MySQL z programów
napisanych w języku Java
Aplikacja kliencka napisana
w języku Java
API JDBC
Sterowniki implementujące
interfejsy zdefiniowane w API Java
J2SE/J2EE
Sterownik JDBC
System zewnętrzny
Rys. komunikacja aplikacji z systemem bazodanowym
Autor: KatMPB
40
41. Dostęp do MySQL z programów
napisanych w języku Java
Sterownik JDBC można podzielić na cztery kategorie:
-Mostek JDBC-ODBC – te sterowniki korzystają z ODBC do implementacji klas
JDBC. Sterowniki te nie są zwykle przenośne, ponieważ zależą zwykle od
bibliotek związanych z danym produktem.
Komunikacja: JDBC->ODBC->system_bazy_danych.
Przykładem tego sterownika jest sterownik JDBC-ODBC wchodzący w skład
pakietu J2SE).
-Połączenie własne API z kodem Java
-Realizacja protokołu sieciowego przy pomocy kodu Java
-Kod języka Java realizujący protokół systemu bazy danych – te sterowniki są
napisane wyłącznie w języku Java i implementują interfejsy JDBC.
„Realizują one przesył danych zgodnie z protokołem używanym przez system
obsługi zewnętrznej bazy danych.”
Firma MySQL-AB jest przykładem dostawcy tego właśnie sterownika.
Autor: KatMPB
41
42. Dostęp do MySQL z programów
napisanych w języku PHP
Patrz przykłady
Uwaga! - Do programu Prezentacja-MySQL-PEAR/prezentacja.php
PEAR (The PHP Extension and Application Repository –
rozszerzenie PHP i magazyn aplikacji).
PEAR jest przede wszystkim obszernym zbiorem klas PHP, co
stwarza możliwości programowania obiektowego w PHP.
Interfejs abstrakcji bazy danych PEAR umożliwia pisanie stron
internetowych w PHP które są niezależne od systemu
bazodanowego (niezależne w tym sensie, że dają się niezmiernie
łatwo przenosić).
Autor: KatMPB
42
43. Dostęp do MySQL z programów
napisanych w językach C i C++
Patrz przykłady
Dostęp do bazy danych MySQL z programów napisanych w C++
umożliwia biblioteka MySQL++ dostępna dla C++ Buildera, Microsoft
Visual C++ i programów napisanych w C++ pod Linuksy.
UWAGA! – PO URUCHOMIENIU PROGRAMU Z PRZYKŁADU NIE DZIAŁA JUŻ PIERWSZA METODA
POŁĄCZENIA (NIE WIEM DLACZEGO) .
Dostęp do bazy danych MySQL z programów napisanych w języku C
w systemach Linux umożliwia biblioteka libmysqlclient.
W przypadku instalacji z pakietów binarnych potrzebny jest pakiet
mysql-devel.rpm oraz kompilator GNU gcc 2.95 lub nowszy.
Autor: KatMPB
43
44. Transakcje
Czym są transakcje?
ANSI SQL a transakcje
Obsługa transakcji dla wielu użytkowników
(poziomy izolacji ANSI, podstawowa
terminologia)
MySQL i transakcje
Autor: KatMPB
44
45. Transakcje i blokowanie
Czym są transakcje?
Transakcja to niepodzielny logicznie blok instrukcji.
Czym jest blok instrukcji?
Jest to zbiór modyfikacji w bazie danych, który musi być albo wykonany w
całości, albo niewykonany w całości.
Zasady ACID (Atomic [atomosość], Consistent [spójność], Isolated [izolacja],
Durable [trwałość]) oznaczają własności jakie powinna posiadać transakcja:
-Atomowość: transakcja, nawet jeżeli składa się na nią grupa operacji, musi działać jako
pojedyncza instrukcja.
-Spójność: na końcu transakcji baza danych musi być spójna.
-Izolacja: oznacza, że każda transakcja, niezależnie od ilości rozpoczętych transakcji w systemie,
musi być niezależna od innych.
-Trwałość: po zakończeniu transakcji jej wyniki muszą być wprowadzone do systemu (zwykle
realizowane poprzez dzienniki transakcji).
Autor: KatMPB
45
46. Transakcje i blokowanie
ANSI SQL a transakcje
W standardzie SQL transakcje są kontrolowane za pomocą trzech instrukcji:
(tabele InnoDB, AUTOCOMMIT włączone)
-BEGIN WORK (instrukcja nadmiarowa)
-COMMIT
-ROLLBACK
Autor: KatMPB
46
47. Transakcje i blokowanie
Obsługa transakcji dla wielu użytkowników
Jednym z najtrudniejszych do zrealizowania aspektów relacyjnych baz
danych jest izolacja poszczególnych użytkowników w czasie aktualizacji bazy
danych.
Standard SQL definiuje różne poziomy izolacji, jakie może zapewnić baza
danych.
Definicja ANSI/ISO poziomu
izolacji
Niespójność
odczytów
Niepowtarzalność
odczytów
Fantomy
Dopuszczalne
Dopuszczalne
Dopuszczalne
Read committed
Niedopuszczalne
Dopuszczalne
Dopuszczalne
Repeatable read
Niedopuszczalne
Niedopuszczalne
Dopuszczalne
Serializable
Niedopuszczalne
Niedopuszczalne
Niedopuszczalne
Read uncommitted
Uwaga! - instrukcja do zmiany poziomów izolacji definiowana przez ANSI SQL: set transaction isolation level.
Autor: KatMPB
47
48. Transakcje i blokowanie
Obsługa transakcji dla wielu użytkowników
-Niespójność odczytów występuje, gdy jedna transakcja SQL może odczytać
dane zmieniane przez drugą transakcje, chociaż transakcja zmieniająca
dane nie zatwierdziła zmian.
(Domyślnie tabele typu InnoDB obsługujące transakcje nie posiadają obsługi
transakcji dopuszczających niespójność odczytów).
-Niepowtarzalność odczytów powoduje, że transakcja może „widzieć” zmiany
zatwierdzone przez inne transakcje, nawet jeżeli sama podczas odczytu nie
jest zatwierdzona.
-Odczyty fantomowe występują podczas dodawania wierszy do tabeli w
czasie, gdy druga tabela aktualizuje ja. Powinien zostać zaktualizowany
również nowy wiersz – a nie jest.
Autor: KatMPB
48
49. Transakcje i blokowanie
Obsługa transakcji dla wielu użytkowników
Nie można zagnieżdżać transakcji. Jedynie kilka baz danych obsługuje
mechanizm punktów kontrolnych przez SQL, w których ustawia się znaczniki
fragmentów transakcji i wycofanie jest przeprowadzone jedynie do
określonego punktu kontrolnego. MySQL nie obsługuje tej funkcji.
Autor: KatMPB
49
50. Transakcje i blokowanie
MySQL i transakcje
W tabelach typu MyISAM można emulować transakcje za pomocą blokad.
LOCK TABLES nazwa_tabeli [ READ | WRITE ]
UNLOCK TABLES
Obsługę transakcji zapewniają tabele typu InnoDB i DBD.
Domyślnie tabele InnoDB zapewniają powtarzalne odczyty, ale oczywiście
można to zmienić.
UWAGA! - SYSTEM DBMS SAM NAKŁADA BLOKADY NA TABELE
(WIERSZE) PODCZAS WYKONYWANIA TRANSAKCJI.
Domyślnie MySQL działa w trybie AUTOCOMMIT. W trybie tym każda
instrukcja jest traktowania jako transakcja.
Żeby przejść w tryb jawnych transakcji należy ustawić AUTOCOMMIT na OFF, przy użyciu
polecenia SET AUTOCOMMIT = [ 0 | 1 ].
Autor: KatMPB
50
51. Transakcje i blokowanie
MySQL i transakcje
Ciekawostka!
W PostgreSQL wpisanie polecenia BEGIN WORK powoduje przełączenie w
tryb jawnych transakcji, a instrukcje COMMIT i ROLLBACK wyłączają ten
tryb.
Blokowanie wierszy – ciekawostka dla programistów!
Polecenie poniżej zakłada blokadę na wiersze:
SELECT … FOR UPDATE; (SELECT 0 FROM customer WHERE customer_id = 15 FOR UPDATE;)
COMMIT lub ROLLBACK – zdejmuję blokadę.
Zakleszczenia – dwie sesje (transakcje) blokują się nawzajem - długie
transakcje.
Autor: KatMPB
51
52. Dodatek
1. mysql -u użytkownik -p --html –tee=wynik.html
Polecenie to zapisuje np. wyniki instrukcji select do pliku wynik.html w
postaci tabeli zgodnej ze standardem html 4.01.
2. Excel->Dane->ImportujDaneZewnętrzne.
Możliwość importowania danych z MySQL do Excela.
Autor: KatMPB
52
53.
Ciastka, kawa i pytania.
Pytania można składać mailem: marekbilski@katmpbsoft.pl
KatMPB
WWW: http://katmpbsoft.blogspot.com
Autor: KatMPB
53