SlideShare une entreprise Scribd logo
1  sur  53
MySQL jako przykład
darmowego systemu
bazodanowego
Autor: KatMPB
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
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
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
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
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
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
Wprowadzenie do MySQL
TCP/IP

Klient
linux

MYSQLD
DATABASE

TCP/IP

Klient (ODBC, JDBC)

Server
windows

Wielu klientów

Jednoczesny dostęp klientów

Autor: KatMPB

8
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Administrowanie MySQL
Pliki konfiguracyjne
Przykładowy plik konfiguracyjny:
[client]
port=3306
#host=192.168.0.1
#user=root
#password=test
#database=linuxmaniad
[mysqld]
skip-locking
port=3306
default-table-type=innodb
basedir=F:/mysql
datadir=F:/mysql/data
set-variable=key_buffer=16M
set-variable=max_allowed_packet=1M
set-variable=thread_stack=128K
set-variable=flush_time=1800
…

…
innodb_data_file_path = ibdata1:10M
innodb_data_home_dir =""
innodb_log_group_home_dir =.
innodb_log_arch_dir = .
set-variable = innodb_mirrored_log_groups=1
set-variable = innodb_log_files_in_group=2
set-variable = innodb_log_file_size=5M
set-variable = innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1
innodb_log_archive=0
set-variable = innodb_buffer_pool_size=16M
set-variable = innodb_additional_mem_pool_size=2M
set-variable = innodb_file_io_threads=4
set-variable = innodb_lock_wait_timeout=50
[WinMySQLadmin]
Server=F:/mysql/bin/mysqld-max-nt.exe
user=root
password=test
Autor: KatMPB

34
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
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
Administrowanie MySQL
Kopie zapasowe
Polecenie wewnętrzne klienta mysqla które wykonuje skrypty SQL z plików
zewnętrznych.
SOURCE <nazwa_skryptu>;

Autor: KatMPB

37
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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


Ciastka, kawa i pytania.
Pytania można składać mailem: marekbilski@katmpbsoft.pl

KatMPB
WWW: http://katmpbsoft.blogspot.com

Autor: KatMPB

53

Contenu connexe

Tendances

Postgresql database administration volume 1
Postgresql database administration volume 1Postgresql database administration volume 1
Postgresql database administration volume 1Federico Campoli
 
Getting started with postgresql
Getting started with postgresqlGetting started with postgresql
Getting started with postgresqlbotsplash.com
 
MySQL Database Architectures - 2020-10
MySQL Database Architectures -  2020-10MySQL Database Architectures -  2020-10
MySQL Database Architectures - 2020-10Kenny Gryp
 
Database Consolidation using the Oracle Multitenant Architecture
Database Consolidation using the Oracle Multitenant ArchitectureDatabase Consolidation using the Oracle Multitenant Architecture
Database Consolidation using the Oracle Multitenant ArchitecturePini Dibask
 
MySQL 8.0.16 New Features Summary
MySQL 8.0.16 New Features SummaryMySQL 8.0.16 New Features Summary
MySQL 8.0.16 New Features SummaryOlivier DASINI
 
OpenGurukul : Database : PostgreSQL
OpenGurukul : Database : PostgreSQLOpenGurukul : Database : PostgreSQL
OpenGurukul : Database : PostgreSQLOpen Gurukul
 
Operation Unthinkable – Software Defined Storage @ Booking.com (Peter Buschman)
Operation Unthinkable – Software Defined Storage @ Booking.com (Peter Buschman)Operation Unthinkable – Software Defined Storage @ Booking.com (Peter Buschman)
Operation Unthinkable – Software Defined Storage @ Booking.com (Peter Buschman)data://disrupted®
 
Introduction to BOOTSTRAP
Introduction to BOOTSTRAPIntroduction to BOOTSTRAP
Introduction to BOOTSTRAPJeanie Arnoco
 
DB2 LUW - Backup and Recovery
DB2 LUW - Backup and RecoveryDB2 LUW - Backup and Recovery
DB2 LUW - Backup and Recoveryimranasayed
 
Patroni: PostgreSQL HA in the cloud
Patroni: PostgreSQL HA in the cloudPatroni: PostgreSQL HA in the cloud
Patroni: PostgreSQL HA in the cloudLucio Grenzi
 
ASP.NET MVC Presentation
ASP.NET MVC PresentationASP.NET MVC Presentation
ASP.NET MVC Presentationivpol
 
Best Practices of running PostgreSQL in Virtual Environments
Best Practices of running PostgreSQL in Virtual EnvironmentsBest Practices of running PostgreSQL in Virtual Environments
Best Practices of running PostgreSQL in Virtual EnvironmentsJignesh Shah
 
MongoDB at Baidu
MongoDB at BaiduMongoDB at Baidu
MongoDB at BaiduMat Keep
 
Oracle dba training
Oracle  dba    training Oracle  dba    training
Oracle dba training P S Rani
 
[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google Cloud[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google CloudPgDay.Seoul
 

Tendances (20)

Postgresql database administration volume 1
Postgresql database administration volume 1Postgresql database administration volume 1
Postgresql database administration volume 1
 
Getting started with postgresql
Getting started with postgresqlGetting started with postgresql
Getting started with postgresql
 
MySQL Database Architectures - 2020-10
MySQL Database Architectures -  2020-10MySQL Database Architectures -  2020-10
MySQL Database Architectures - 2020-10
 
Database Consolidation using the Oracle Multitenant Architecture
Database Consolidation using the Oracle Multitenant ArchitectureDatabase Consolidation using the Oracle Multitenant Architecture
Database Consolidation using the Oracle Multitenant Architecture
 
PostgreSQL
PostgreSQL PostgreSQL
PostgreSQL
 
MySQL 8.0.16 New Features Summary
MySQL 8.0.16 New Features SummaryMySQL 8.0.16 New Features Summary
MySQL 8.0.16 New Features Summary
 
Introdução ao HTML e CSS
Introdução ao HTML e CSSIntrodução ao HTML e CSS
Introdução ao HTML e CSS
 
#1 Introdução ao MongoDB
#1   Introdução ao MongoDB#1   Introdução ao MongoDB
#1 Introdução ao MongoDB
 
PostgreSQL.pptx
PostgreSQL.pptxPostgreSQL.pptx
PostgreSQL.pptx
 
Print CSS
Print CSSPrint CSS
Print CSS
 
OpenGurukul : Database : PostgreSQL
OpenGurukul : Database : PostgreSQLOpenGurukul : Database : PostgreSQL
OpenGurukul : Database : PostgreSQL
 
Operation Unthinkable – Software Defined Storage @ Booking.com (Peter Buschman)
Operation Unthinkable – Software Defined Storage @ Booking.com (Peter Buschman)Operation Unthinkable – Software Defined Storage @ Booking.com (Peter Buschman)
Operation Unthinkable – Software Defined Storage @ Booking.com (Peter Buschman)
 
Introduction to BOOTSTRAP
Introduction to BOOTSTRAPIntroduction to BOOTSTRAP
Introduction to BOOTSTRAP
 
DB2 LUW - Backup and Recovery
DB2 LUW - Backup and RecoveryDB2 LUW - Backup and Recovery
DB2 LUW - Backup and Recovery
 
Patroni: PostgreSQL HA in the cloud
Patroni: PostgreSQL HA in the cloudPatroni: PostgreSQL HA in the cloud
Patroni: PostgreSQL HA in the cloud
 
ASP.NET MVC Presentation
ASP.NET MVC PresentationASP.NET MVC Presentation
ASP.NET MVC Presentation
 
Best Practices of running PostgreSQL in Virtual Environments
Best Practices of running PostgreSQL in Virtual EnvironmentsBest Practices of running PostgreSQL in Virtual Environments
Best Practices of running PostgreSQL in Virtual Environments
 
MongoDB at Baidu
MongoDB at BaiduMongoDB at Baidu
MongoDB at Baidu
 
Oracle dba training
Oracle  dba    training Oracle  dba    training
Oracle dba training
 
[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google Cloud[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google Cloud
 

En vedette

Ms Sql Server
Ms Sql ServerMs Sql Server
Ms Sql Serverscale
 
GO Model Canvas. projektowanie celów
GO Model Canvas. projektowanie celówGO Model Canvas. projektowanie celów
GO Model Canvas. projektowanie celówTomasz Krzemiński
 
6. Określenie form organizacyjno-prawnych podmiotu gospodarczego
6. Określenie form organizacyjno-prawnych podmiotu gospodarczego 6. Określenie form organizacyjno-prawnych podmiotu gospodarczego
6. Określenie form organizacyjno-prawnych podmiotu gospodarczego Lukas Pobocha
 
Zmiany klimatyczne i zanieczyszczenia w Warszawie
Zmiany klimatyczne i zanieczyszczenia w WarszawieZmiany klimatyczne i zanieczyszczenia w Warszawie
Zmiany klimatyczne i zanieczyszczenia w WarszawieLOCzacki
 
Handel spożywczy w polsce w latach 2010 2020
Handel spożywczy w polsce w latach 2010 2020Handel spożywczy w polsce w latach 2010 2020
Handel spożywczy w polsce w latach 2010 2020Aleksandra Kruzel
 
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)Krzysztof Kotowicz
 

En vedette (12)

Ms Sql Server
Ms Sql ServerMs Sql Server
Ms Sql Server
 
GO Model Canvas. projektowanie celów
GO Model Canvas. projektowanie celówGO Model Canvas. projektowanie celów
GO Model Canvas. projektowanie celów
 
Excel Zaawansowany - Lekcja 3
Excel Zaawansowany - Lekcja 3Excel Zaawansowany - Lekcja 3
Excel Zaawansowany - Lekcja 3
 
6. Określenie form organizacyjno-prawnych podmiotu gospodarczego
6. Określenie form organizacyjno-prawnych podmiotu gospodarczego 6. Określenie form organizacyjno-prawnych podmiotu gospodarczego
6. Określenie form organizacyjno-prawnych podmiotu gospodarczego
 
Zespół Downa
Zespół DownaZespół Downa
Zespół Downa
 
Wyklad 161718
Wyklad 161718Wyklad 161718
Wyklad 161718
 
Zmiany klimatyczne i zanieczyszczenia w Warszawie
Zmiany klimatyczne i zanieczyszczenia w WarszawieZmiany klimatyczne i zanieczyszczenia w Warszawie
Zmiany klimatyczne i zanieczyszczenia w Warszawie
 
8
88
8
 
Handel spożywczy w polsce w latach 2010 2020
Handel spożywczy w polsce w latach 2010 2020Handel spożywczy w polsce w latach 2010 2020
Handel spożywczy w polsce w latach 2010 2020
 
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
 
Stres
StresStres
Stres
 
Metodologia badań
Metodologia badańMetodologia badań
Metodologia badań
 

Similaire à Kurs MySQL i SQL, bazy danych - prezentacja ppt, pdf, porady, trening, kurs internetowy online

"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbaćBartosz Ratajczyk
 
Migracja I Integracja Bazy
Migracja I Integracja BazyMigracja I Integracja Bazy
Migracja I Integracja BazyPrzemysław ...
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Cloudskraqa
 
Integracja liquibase ze stroną internetową dla zarządzania bazami danych[авто...
Integracja liquibase ze stroną internetową dla zarządzania bazami danych[авто...Integracja liquibase ze stroną internetową dla zarządzania bazami danych[авто...
Integracja liquibase ze stroną internetową dla zarządzania bazami danych[авто...Sofiia Lahoda
 
Integracja liquibase ze stroną internetową dla zarządzania mapami
Integracja liquibase ze stroną internetową dla zarządzania mapami Integracja liquibase ze stroną internetową dla zarządzania mapami
Integracja liquibase ze stroną internetową dla zarządzania mapami Sofiia Lahoda
 
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...Tomasz Kopacz
 
Czwartki z bi - Reporting Services - podstawy
Czwartki z bi - Reporting Services - podstawyCzwartki z bi - Reporting Services - podstawy
Czwartki z bi - Reporting Services - podstawyMariusz Koprowski
 
VirtualStudy.pl - Czwartki z BI - Reporting Services
VirtualStudy.pl - Czwartki z BI - Reporting ServicesVirtualStudy.pl - Czwartki z BI - Reporting Services
VirtualStudy.pl - Czwartki z BI - Reporting ServicesSSAS.PL
 
Bazy danych i MySQL. Od podstaw
Bazy danych i MySQL. Od podstawBazy danych i MySQL. Od podstaw
Bazy danych i MySQL. Od podstawWydawnictwo Helion
 
Migracja z Drupal 6 PressFlow do WordPress 4
Migracja z Drupal 6 PressFlow do WordPress 4Migracja z Drupal 6 PressFlow do WordPress 4
Migracja z Drupal 6 PressFlow do WordPress 4Dawid Rzepczynski
 
Roman Czarko-Wasiutycz- Projektowanie baz danych
Roman Czarko-Wasiutycz- Projektowanie baz danychRoman Czarko-Wasiutycz- Projektowanie baz danych
Roman Czarko-Wasiutycz- Projektowanie baz danychWomen in Technology Poland
 
Pocałunek śmierci
Pocałunek śmierciPocałunek śmierci
Pocałunek śmierciDivante
 
My littlemvc 2008 official
My littlemvc 2008 officialMy littlemvc 2008 official
My littlemvc 2008 officialskowronkow
 
Nowości w zakresie bezpieczeństwa w SQL Server 2016
Nowości w zakresie bezpieczeństwa w SQL Server 2016Nowości w zakresie bezpieczeństwa w SQL Server 2016
Nowości w zakresie bezpieczeństwa w SQL Server 2016Kamil Nowinski
 

Similaire à Kurs MySQL i SQL, bazy danych - prezentacja ppt, pdf, porady, trening, kurs internetowy online (20)

SQLite 2010
SQLite 2010SQLite 2010
SQLite 2010
 
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
 
Migracja I Integracja Bazy
Migracja I Integracja BazyMigracja I Integracja Bazy
Migracja I Integracja Bazy
 
Co warto wiedzieć o bazach danych
Co warto wiedzieć o bazach danychCo warto wiedzieć o bazach danych
Co warto wiedzieć o bazach danych
 
Podstawy ETL z SSIS
Podstawy ETL z SSISPodstawy ETL z SSIS
Podstawy ETL z SSIS
 
Liquibase w praktyce
Liquibase w praktyceLiquibase w praktyce
Liquibase w praktyce
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Clouds
 
Integracja liquibase ze stroną internetową dla zarządzania bazami danych[авто...
Integracja liquibase ze stroną internetową dla zarządzania bazami danych[авто...Integracja liquibase ze stroną internetową dla zarządzania bazami danych[авто...
Integracja liquibase ze stroną internetową dla zarządzania bazami danych[авто...
 
Integracja liquibase ze stroną internetową dla zarządzania mapami
Integracja liquibase ze stroną internetową dla zarządzania mapami Integracja liquibase ze stroną internetową dla zarządzania mapami
Integracja liquibase ze stroną internetową dla zarządzania mapami
 
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
 
Czwartki z bi - Reporting Services - podstawy
Czwartki z bi - Reporting Services - podstawyCzwartki z bi - Reporting Services - podstawy
Czwartki z bi - Reporting Services - podstawy
 
VirtualStudy.pl - Czwartki z BI - Reporting Services
VirtualStudy.pl - Czwartki z BI - Reporting ServicesVirtualStudy.pl - Czwartki z BI - Reporting Services
VirtualStudy.pl - Czwartki z BI - Reporting Services
 
Bazy danych i MySQL. Od podstaw
Bazy danych i MySQL. Od podstawBazy danych i MySQL. Od podstaw
Bazy danych i MySQL. Od podstaw
 
Migracja z Drupal 6 PressFlow do WordPress 4
Migracja z Drupal 6 PressFlow do WordPress 4Migracja z Drupal 6 PressFlow do WordPress 4
Migracja z Drupal 6 PressFlow do WordPress 4
 
Roman Czarko-Wasiutycz- Projektowanie baz danych
Roman Czarko-Wasiutycz- Projektowanie baz danychRoman Czarko-Wasiutycz- Projektowanie baz danych
Roman Czarko-Wasiutycz- Projektowanie baz danych
 
MySQL
MySQLMySQL
MySQL
 
MySQL prostymi słowami
MySQL prostymi słowamiMySQL prostymi słowami
MySQL prostymi słowami
 
Pocałunek śmierci
Pocałunek śmierciPocałunek śmierci
Pocałunek śmierci
 
My littlemvc 2008 official
My littlemvc 2008 officialMy littlemvc 2008 official
My littlemvc 2008 official
 
Nowości w zakresie bezpieczeństwa w SQL Server 2016
Nowości w zakresie bezpieczeństwa w SQL Server 2016Nowości w zakresie bezpieczeństwa w SQL Server 2016
Nowości w zakresie bezpieczeństwa w SQL Server 2016
 

Kurs MySQL i SQL, bazy danych - prezentacja ppt, pdf, porady, trening, kurs internetowy online

  • 1. MySQL jako przykład darmowego systemu bazodanowego Autor: KatMPB
  • 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
  • 8. Wprowadzenie do MySQL TCP/IP Klient linux MYSQLD DATABASE TCP/IP Klient (ODBC, JDBC) Server windows Wielu klientów Jednoczesny dostęp klientów Autor: KatMPB 8
  • 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
  • 34. Administrowanie MySQL Pliki konfiguracyjne Przykładowy plik konfiguracyjny: [client] port=3306 #host=192.168.0.1 #user=root #password=test #database=linuxmaniad [mysqld] skip-locking port=3306 default-table-type=innodb basedir=F:/mysql datadir=F:/mysql/data set-variable=key_buffer=16M set-variable=max_allowed_packet=1M set-variable=thread_stack=128K set-variable=flush_time=1800 … … innodb_data_file_path = ibdata1:10M innodb_data_home_dir ="" innodb_log_group_home_dir =. innodb_log_arch_dir = . set-variable = innodb_mirrored_log_groups=1 set-variable = innodb_log_files_in_group=2 set-variable = innodb_log_file_size=5M set-variable = innodb_log_buffer_size=8M innodb_flush_log_at_trx_commit=1 innodb_log_archive=0 set-variable = innodb_buffer_pool_size=16M set-variable = innodb_additional_mem_pool_size=2M set-variable = innodb_file_io_threads=4 set-variable = innodb_lock_wait_timeout=50 [WinMySQLadmin] Server=F:/mysql/bin/mysqld-max-nt.exe user=root password=test Autor: KatMPB 34
  • 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
  • 37. Administrowanie MySQL Kopie zapasowe Polecenie wewnętrzne klienta mysqla które wykonuje skrypty SQL z plików zewnętrznych. SOURCE <nazwa_skryptu>; Autor: KatMPB 37
  • 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