Relacyjne Bazy Danych - podyplomowe studium 'systemy ... rok.kons/bazy_danych_wyklad_Ireneusz... ·...
Transcript of Relacyjne Bazy Danych - podyplomowe studium 'systemy ... rok.kons/bazy_danych_wyklad_Ireneusz... ·...
POLITECHNIKA WROCŁAWSKA
WROCŁAWSKIE CENTRUM SIECIOWO-SUPERKOMPUTEROWE
Relacyjne Bazy Danych
mgr inż. Ireneusz Tarnowski
e-mail: [email protected]
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 1
PLAN SEMINARIUM
1. Wprowadzenie (definicje - małe powtórzenie)
2. System Zarządzania Bazą danych
3. Relacyjne bazy danych
4. Dane, struktury, relacje
5. Projektowanie bazy danych
6. MySQL jako SZBD
7. Oracle Database jako SZBD
8. Język SQL
9. Aplikacja bazodanowa
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 2
Wprowadzenie (definicje - małe powtórzenie)
Dana (ang. data) - najmniejsza, elementarna jednostka informacji o obiekcie będąca przedmio-
tem przetwarzania komputerowego.
Rekord (ang. record) - zwany także krotką lub wierszem, to pozioma struktura danych opisu-
jąca jeden obiekt. Rekord składa się z pól opisujących dokładnie cechy obiektu
Pole (ang. field) - zwane także atrybutem lub kolumną, to struktura danych opisująca poje-
dynczą daną w rekordzie
Tabela (ang. table) - nazywamy zbiór rekordów opisujących obiekty w sposób ujednolicony tj.
każdy rekord posiada te same nazwy pól
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 3
Wprowadzenie (definicje - małe powtórzenie)
Klucz podstawowy (ang. primary key)
Klucz podstawowy (klucz główny) to jedno lub więcej pól, których wartość jednoznacznie iden-
tyfikuje każdy rekord w tabeli (cecha: unikatowość). Klucz jest nazywany kluczem obcym(ang. foreign key), jeśli odwołuje się do klucza głównego innej tabeli.
Klucz podstawowy jednopolowy (ang. single primary key)
Jeśli istnieje pole zawierające dane unikatowe, można je zadeklarować jako klucz podstawowy.
Klucz podstawowy wielopolowy zwany też kluczem złożonym (ang. composed key)
Gdy żadne z pól nie gwarantuje unikatowości wartości w nim zawartych, należy utworzyć klucz
podstawowy złożonego z kilku pól.
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 4
System Zarządzania Bazą Danych (1)
System Zarządzania Bazą Danych, SZBD (ang. Database Management System, DBMS)
(potocznie: serwer baz danych, system baz danych) to oprogramowanie bądź system informa-
tyczny służący do zarządzania komputerowymi bazami danych. Systemy baz danych mogą być
sieciowymi serwerami baz danych lub udostępniać bazę danych lokalnie.
Większość obecnie spotykanych systemów działa w trybie klient-serwer, gdzie baza danych jest
udostępniana klientom przez SZBD będący serwerem.
Najpopularnijesz dostępne systemy baz danych (Baza danych + System Zarządznaia Bazą Da-
nych):
klient-serwer: Oracle, MySQL, PosgreSQL, DB2, mSQL, dBase, Microsoft SQL Server, Inter-
Base, Informix Dynamic Server, Firebird
lokalne:Microsoft Access, SQLite
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 5
System Zarządzania Bazą Danych (2)
ZSBD musi zapewnić:- środki do gromadzenia, utrzymywania i administrowania trwałymi i masowymi zbiorami da-
nych,
- środki zapewniające spójność i bezpieczeństwo danych,
- sprawny dostęp do danych (zwykle poprzez język zapytań, np. SQL),
- środki programistyczne służące do aktualizacji/przetwarzania danych (API dla popularnych
języków programowania),
- jednoczesny dostęp do danych dla wielu użytkowników (z reguły realizowany poprzez trans-
akcje),
- środki pozwalające na regulację dostępu do danych (autoryzację),
- środki pozwalające na odtworzenie zawartości bazy danych po awarii,
- środki do zarządzania katalogami, schematami i innymi metadanymi,
- środki optymalizujące zajętość pamięci oraz czas dostępu (np. indeksy),
- środki do pracy lub współdziałania w środowiskach rozproszonych.
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 6
Relacyjne bazy danych (1)
Relacyjna baza danych (RDBMS ang. Relational Database Management Systems) oparta jest
ma modelu relacyjnym.
Model relacyjny to model baz danych oparty na postulatach relacyjności. Twórcą teorii rela-
cyjnych baz danych jest nieżyjący już Edgar Frank Codd.
Dane w modelu relacyjnym są reprezentowane jako zbiór krotek, które w znormalizowanych
bazach danych są unikatowe i nie gra roli ich kolejność. Dostęp do nich jest realizowany
za pomocą algebry relacji - czyli dostęp do danych definiujemy poprzez operatory relacyjne
takie jak: rzutowanie, selekcja, złączenie, suma, różnica, produkt kartezjański. Ograniczenie
redundancji danych dokonuje się w procesie przejścia do kolejnych postaci normalnych. Zbiory
danych powiązane są logicznie za pomocą encji. W ten sposób uniezależnia się widziany przez
użytkownika obraz bazy danych od jej postaci fizycznej.
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 7
Relacyjne bazy danych (2)
W modelu relacyjnym każda relacja (prezentowana w postaci np. tabeli) posiada nagłówek i za-
wartość. Nagłówek relacji to zbiór atrybutów, gdzie atrybut jest parą nazwa atrybutu:nazwa typu,
zawartość natomiast jest zbiorem krotek (reprezentowanych najczęściej w postaci wiersza lecz
ściślej określane jako zbiór wartości atrybutów).
Sukces relacyjnych baz danych leży w istnieniu formalnej matematycznej struktury zwanej ra-
chunkiem relacyjnym, pozwalającym przeprowadzić automatyczne sprawdzanie pewnych kon-
strukcji. Gwarantuje to wykonalność pewnych operacji i spójność zbiorów danych.
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 8
Relacje (1)
Relacja (ang. relation) - informacja na temat sposobu poprawnego łączenia powiązanych da-
nych w logiczną całość.
Typy relacji:
Relacja jeden-do-jednego (1:1)
W relacji 1:1 każdy rekord w tabeli A może mieć tylko jeden dopasowany rekord z tabeli B, i
tak samo każdy rekord w tabeli B może mieć tylko jeden dopasowany rekord z tabeli A. Ten
typ relacji spotyka się rzadko, ponieważ większość informacji powiązanych w ten sposób byłoby
zawartych w jednej tabeli. Relacji 1:1 można używać do podziału tabeli z wieloma polami,
do odizolowania części tabeli ze względów bezpieczeństwa, albo do przechowania informacji
odnoszącej się tylko do podzbioru tabeli głównej.
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 9
Relacje (2)
Typy relacji: (c.d.)
Relacja jeden-do-wielu Relacja (1:n)
W relacji jeden-do-wielu rekord w tabeli A może mieć wiele dopasowanych do niego rekordów z
tabeli B, ale rekord w tabeli B ma tylko jeden dopasowany rekord w tabeli A.
Relacja wiele-do-wielu Relacja (m:n)
W relacji m:n, rekord w tabeli A może mieć wiele dopasowanych do niego rekordów z tabeli
B i tak samo rekord w tabeli B może mieć wiele dopasowanych do niego rekordów z tabeli A.
Jest to możliwe tylko przez zdefiniowanie trzeciej tabeli (nazywanej tabelą łącza), której klucz
podstawowy składa się z dwóch pól - kluczy obcych z tabel A i B. Relacja m:n jest w istocie
dwiema relacjami 1:n z trzecią tabelą.
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 10
Projektowanie bazy danych (1)
- Przechowywanie wymaganych danych
podstawowa struktura musi być prawidłowa w pierwszej iteracji
- Tworzenie wymaganych relacji
schemat musi pozwolić na utworzenie relacji między tabelami
- Rozwiązywanie problemów
baza musi rozwiązywać problemy - a nie być ich źródłem
- Wymuszenie integralnosci danych
unikać degradacji danych oraz niekompletnych danych
- Efektywny dostęp do danych
tworzyć z zasadami sztuki; na końcu optymalizacja
- Rozszerzalność
nie zablokować rozbudowy bazy danych oraz tabel
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 11
Projektowanie bazy danych (2)
- Zbieranie informacji
- Projekt logiczny
- Określanie encji
- Konwersja encji na tabele
- Określanie relacji i liczebności
- Diagram związkow encji
- Konwersja do modelu fizycznego
- Tworzenie kluczy głównych
- Tworzneie kluczy obcych
- Ustalanie typów danych
- Dokończenie definicji tabel
- Sprawdzenie projektu
- Normalizacja (zmiana postaci normalnej 1→2→3)
- Wzorce projektowe (relacja wiele-do-wielu, hierarchia, rekurencja)
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 12
MySQL jako SZBD
MySQL jest szybkim, wielowątkowym serwerem relacyjnych baz danych obsługującym język
zapytań baz danych - SQL. Pracuje z wieloma użytkownikami jednocześnie, jest szybki, wydajny,
ma wbudowane wydajne i bezpieczne mechanizmy transakcji i widoków.
Działa na niemal wszystkich systemach operacyjnych, tj. Microsoft Windows, Oracle (Sun)
Solaris, FreeBSD, IBM i5/OS, IBM AIX, Mac OS X HP-UX, Red Hat Enterprise Linux, SuSE
Linux Enterprise Server, Linux - Generic (Ubuntu, Fedora, Debian, CentOS, ...).
Mechanizmy HA: replikacja, klaster
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 13
MySQL - licencjonowanie, ograniczenia
Dwa modele licencyjne
1. GNU General Public License (Community Edition)
2. komercyjne (Enterprise Edition)
Ograniczenia związane są z możliwością przetworzenia rekordów oraz wielkościami plików bazy
danych (ograniczenie wynikające z systemu plików OS).
Otwarte źródła (Open Source)
Uznaje się, że:
→ doskonale pracuje do 1 000 0000 rekordów,
→ producent zaleca nie więcej niż 50 000 0000 rekordów,
→ pracujące sa instalacje z 60 000 tabel i 5 000 000 000 rekordów.
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 14
MySQL w praktyce (1)
> mysql -u root -p
Enter password: *******
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 456 to server version 5.1.2
Type ’help’ for help.
mysql>
use - polecenie służące do wyboru interesującej nas bazy danych (nie podaliśmy nazwy bazy
danych w sposób jawny lub chcemy zmienić bazę danych, z którą do tej pory interaktywnie
pracowaliśmy).
show databases; - wyświetla nazwy baz danych na serwerze (do których mamy dostęp).
show tables; - wyświetla listę wszystkich tabel wybranej bazy danych.
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 15
MySQL w praktyce (2)
describe nazwa tabeli; - wyświetla informacje o strukturze tabeli (nazwy kolumn wybranej
tabeli, typy danych kolumn, domyślne wartościach pól danych, które znajdą się w rekordach).
source - polecenia SQL w zebrane pliku tekstowym, który jako parametr polecenia source
(wykonamy polecenia zebrane w pliku).
pager - polecenie pager nazwa programu możemy uruchomić odpowiedni program nazwa programu
aby włączyć odpowiedni mechanizm przeglądania wyników przez formatowanie ich na ekranie
zewnętrznym programem. Takim programem może być albo program less albo more. Kiedy
chcemy wyłączyć mechanizm stronicowania można wydać polecenie nopager.
tee - polecenie używane do zapisu sesji pracy z bazą danych (podając jednocześnie nazwę
pliku jako parametr wywołania). Od momentu wydania tego polecenia wszystkie polecenia będą
zapisywane do pliku. Aby zakończy zapisywanie do pliku wystarczy wydać polecenie notee.
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 16
Oracle Database
Oracle Enterprise Edition,
Oracle Standard Edition,
Oracle Standard Edition One– bazy komercyjne o różnej funkcjonalności, najnowszy wydanie Oracle Database 11g,
Oracle Database Express Edition (Oracle Database XE )
– wersja darmowa, ograniczona (m.in. jeden procesor, obsługa maksymalnie 4 GB danych użyt-
kownika, etc.), udostępniona od wersji 10g.
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 17
PL/SQL - co to jest?
— Proceduralne rozszerzenie programistyczne języka SQL, stworzone, udostępnione przez Orac-
le i przeznaczone do obsługi narzędzi tej firmy,
— Wywodzi się z języka ADA, wiele pomysłów jest zapożyczonych z tego języka, PL w nazwie
to skrót od procedural language (z ang.), czyli języka proceduralnego,
— Jest chroniony prawami autorskimi,
— Jest językiem trzeciej generacji 3GL,
— Początkowo jedynie proceduralny, obecnie możemy go traktować jako obiektowy,
— Powstał jako odpowiedź na zapotrzebowanie samych pracowników firmy Oracle oraz ze-
wnętrznych użytkowników jej produktów.
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 19
PL/SQL zalety
— Łączy SQL z konstrukcjami proceduralnymi – SQL jest prosty, ale ma ograniczone możliwości,
— Poprawia wydajność – pozwala przetwarzać bloki instrukcji, a nie pojedyncze zapytania SQL,
— Modularyzacja – pozwala na tworzenie bloków, które mogą skupiać logicznie powiązane
wyrażenia, zagnieżdżać bloki, dzielić program na mniejsze logiczne jednostki, to pozwala na
łatwiejsze utrzymywanie i debugowanie kodu,
— Jest zintegrowany z innymi narzędziami Oracle (Reprots, Forms), dzięki temu kod przetwa-
rzany jest przez lokalny silnik a do bazy danych przesyłane są tylko zapytania SQL,
— Jest przenośny – działa tak samo na różnych platformach i w różnych systemach operacyj-
nych,
— Posiada obsługę wyjątków
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 20
Oracle SQL*Plus
— Podstawowy interfejs bazy danych niezależnie od wersji,
— Dołączany do wszystkich wersji serwera bazodanowego,
— Dostępny z poziomu serwera i klienta,
— Wykorzystywane poprzez wiersz poleceń, graficzny interfejs bądź przeglądarkę,
— Jest zawsze dostępny i niezmienny.
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 21
Oracle SQL Developer
— Darmowe, graficzne narzędzie dla programistów Oracle,
— Wspomaga i ułatwia pracę z bazą danych,
— Ułatwia przeglądanie obiektów bazy i zarządzanie nimi, wykonywanie zapytań i skryptów,
edycję i debugowanie poleceń PL/SQL, kreowanie raportów,
— Posiada udogodnienia typu: podpowiedzi, kolorowanie kodu, etc.
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 22
Oracle JDeveloper
— Wymaga licencji w przypadku zastosowań komercyjnych, darmowy w przypadku gdy używany
w celach niekomercyjnych,
— Od wersji 9i umożliwia tworzenie, pielęgnację i diagnozowanie kodu PL/SQL,
— JDeveloper 10g pozwala na: wyświetlanie wszystkich obiektów bazodanowych, edycję kodu
PL/SQL oraz dostarcza szablony kodu, porady w sprawie optymalizacji SQL i mechanizmy
diagnostyczne.
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 23
Język SQL
SQL (ang. Structured Query Language) – strukturalny język zapytań używany do tworzenia,
modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych.
SQL - standard w komunikacji z serwerami relacyjnych baz danych; W 1986 roku SQL stał się
oficjalnym standardem, wspieranym przez Międzynarodową Organizację Normalizacyjną (ISO)
oraz Amerykański Narodowy Instytut Normalizacji (ANSI).
Język SQL pozwala wprowadzać zmiany w strukturze bazy danych, jak również zmiany danych
w bazie i wybieranie informacji z bazy danych. Język ten opiera się na silniku bazy danych,
który pozwala zadawać w języku SQL pewnego rodzaju pytania (kwerendy) i wyświetlać dane,
które spełniają warunki zapytania. Zapytania SQL mogą także wykonywać operacje wstawiania
danych, usuwania danych i ich aktualizacji. Język SQL zapewnia również zarządzanie bazą
danych. Informacja o samej bazie przechowywana jest w postaci relacji (tabel) wewnątrz bazy
danych.
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 24
Język SQL - typy danych
Typ danej - rodzaj danej, czyli forma zapisu informacji:
- znakowy (ang.character) - dana może przybierać tylko wartości znaków pisarskich,
- liczbowy (ang.number) - dana może przechowywać tylko liczby,
- logiczny (ang.logical) - dana może przybierać tylko dwie wartości: prawda, fałsz (tak, nie),
- data (ang.date) - dana może przyjmować postać daty i czasu np. rok.miesiąc.dzień godz:min:sek,
- alfanumeryczny (ang.alphanumeric) - dana może przybierać wartości znaków ASCII oraz cyfry,
- numeryczny (ang.numeric) - wartościami danej mogą być tylko cyfry i znaki: + (plus), -
(minus),
- walutowy (ang.currency) - dana może przyjmować wartości liczbowe razem z symbolem waluty,
- notatnikowy (ang.memo) - dana może być oddzielnym zbiorem tekstowym służącym do prze-
chowywania dowolnych opisów,
- binarny (ang.binary) - dana może być np. plikiem dźwiękowym lub filmowym,
- graficzny (ang.graphic) - dana przechowuje grafikę np. rysunki,
- obiektowy (ang.OLE) - dana przechowuje obiekty.
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 25
Język SQL - tworzenie bazy danych
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
[create_specification ...]
create_specification:
[DEFAULT] CHARACTER SET [=] charset_name
| [DEFAULT] COLLATE [=] collation_name
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 26
Język SQL - tworzenie tabel
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[table_option] ...
create_definition:
col_name column_definition
| [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)
| {INDEX|KEY} [index_name] [index_type] (index_col_name,...)
column_definition:
data_type [NOT NULL | NULL] [DEFAULT default_value]
[AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]
[COMMENT ’string’] [reference_definition]
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 27
Język SQL - tworzenie tabel
data_type:
BIT[(length)]
| TINYINT[(length)] [UNSIGNED] [ZEROFILL]
| SMALLINT[(length)] [UNSIGNED] [ZEROFILL]
| MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]
| INT[(length)] [UNSIGNED] [ZEROFILL]
| INTEGER[(length)] [UNSIGNED] [ZEROFILL]
| BIGINT[(length)] [UNSIGNED] [ZEROFILL]
| REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]
| DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]
| FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]
| DECIMAL[(length[,decimals])] [UNSIGNED] [ZEROFILL]
| NUMERIC[(length[,decimals])] [UNSIGNED] [ZEROFILL]
| DATE | TIME | TIMESTAMP | DATETIME | YEAR
| CHAR[(length)][CHARACTER SET charset_name] [COLLATE collation_name]
| VARCHAR(length) [CHARACTER SET charset_name] [COLLATE collation_name]
| BINARY[(length)]
| VARBINARY(length)
| TINYBLOB | MEDIUMBLOB | LONGBLOB
| TINYTEXT [BINARY][CHARACTER SET charset_name] [COLLATE collation_name]
| TEXT [BINARY][CHARACTER SET charset_name] [COLLATE collation_name]
| MEDIUMTEXT [BINARY][CHARACTER SET charset_name] [COLLATE collation_name]
| LONGTEXT [BINARY][CHARACTER SET charset_name] [COLLATE collation_name]
| ENUM(value1,value2,value3,...)
[CHARACTER SET charset_name] [COLLATE collation_name]
| SET(value1,value2,value3,...)
[CHARACTER SET charset_name] [COLLATE collation_name]
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 28
Język SQL - zmiana struktury tabeli
ALTER TABLE tbl_name alter_specification [, alter_specification] ...alter_specification:
| ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name ]
| ADD [COLUMN] (col_name column_definition,...)
| ADD {INDEX|KEY} [index_name] [index_type] (index_col_name,...) [index_type]
| ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...) [index_type]
| ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name]
[index_type] (index_col_name,...) [index_type]
| ADD [FULLTEXT|SPATIAL] [INDEX|KEY] [index_name]
(index_col_name,...) [index_type]
| ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...)
| ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
| CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]
| MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]
| DROP [COLUMN] col_name
| DROP PRIMARY KEY
| DROP {INDEX|KEY} index_name
| DROP FOREIGN KEY fk_symbol
| RENAME [TO] new_tbl_name
| ORDER BY col_name [, col_name] ...
| CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
| [DEFAULT] CHARACTER SET [=] charset_name [COLLATE [=] collation_name]
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 29
Język SQL - wstawianie danych
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
VALUES ({expr | DEFAULT},...),(...),...
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 30
Język SQL - modyfikacja danych
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 31
Język SQL - usuwanie danych
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
tbl_name[.*] [, tbl_name[.*]] ...
FROM table_references
[WHERE where_condition]
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 32
Język SQL - usuwanie tabeli i bazy danych
DROP [TEMPORARY] TABLE [IF EXISTS]
tbl_name [, tbl_name] ...
[RESTRICT | CASCADE]
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 33
Język SQL - wydobywanie danych
SELECT
[ALL | DISTINCT | DISTINCTROW ]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr, ...
[FROM table_references
[WHERE where_condition]
[GROUP BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
[HAVING where_condition]
[ORDER BY {col_name | expr | position}
[ASC | DESC], ...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
[PROCEDURE procedure_name(argument_list)]
[INTO OUTFILE ’file_name’ export_options
| INTO DUMPFILE ’file_name’
| INTO var_name [, var_name]]
[FOR UPDATE | LOCK IN SHARE MODE]]
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 34
Język SQL - uprawneinia
GRANT priv_type [(column_list)] ON [object_type]
{ * | *.* | db_name.* | db_name.tbl_name
| tbl_name | db_name.routine_name }
TO user [IDENTIFIED BY [PASSWORD] ’password’]
[WITH with_option [with_option] ...]
object_type =
TABLE | FUNCTION | PROCEDURE
with_option =
GRANT OPTION | MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count | MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 35
Język SQL - uprawneinia
REVOKE
priv_type [(column_list)] ON [object_type]
{ * | *.* | db_name.* | db_name.tbl_name
| tbl_name | db_name.routine_name }
FROM user [, user] ...
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
CREATE USER
DROP USER
SET PASSWORD
RENAME USER
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 36
Język SQL - złączenia tabel
Model relacyjny zakłada, że dane, zawarte w bazie danych, podzielone są na tabele. W pewnych
sytuacjach konieczne będzie połączenie danych, zawartych w kilku tabelach, w celu uzyskania
tabeli wynikowej. Proces taki nazywamy złączeniem (ang. join), ze względu na sposób łączenia
dzieli się operacje złączeń na trzy grupy:
- złączenia wewnętrzne
- złączenia zewnętrzne
- samozłączenia
SELECT * FROM tabela1, tabela2
SELECT * FROM tabela1, tabela2 WHERE tabela1.klucz_główny = tabela2.klucz_obcy
SELECT * FROM tabela1 JOIN tabela2 ON warunek_złączenia_tabel
SELECT * FROM tabela1 LEFT OUTER JOIN tabela2...
SELECT * FROM tabela1 RIGHT OUTER JOIN tabela2...
SELECT * FROM tabela1 FULL OUTER JOIN tabela2...
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 37
Język SQL - podzapytania
Podzapytanie, to instrukcja SELECT zagnieżdżona w innej instrukcji SQL, która dostarcza
dla tej drugiej danych wejściowych. Podzapytanie jest zapytaniem zagnieżdżonym. Język SQL
nie wprowadza ograniczeń na ilość zagnieżdżeń, w związku z czym zapytanie otaczające też
może być podzapytaniem.
SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 38
Język SQL - transakcje
Transakcja wykonuje się albo w całości, albo wcale. Jeżeli w trakcie wykonywania
transakcji wystąpi jakiś błąd, całą sekwencję operacji można odwołać, przywracając bazę do
stanu sprzed rozpoczęcia tej sekwencji.
START TRANSACTION [WITH CONSISTENT SNAPSHOT] | BEGIN [WORK]
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
SET AUTOCOMMIT = {0 | 1}
START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 39
Język SQL - wyzwalacze (ang. triggers)
Trigger jest obiektem związanym z tablicą, który aktywuje się gdy do tablicy następuje odpo-
wiednie zapytanie.
Dzięki triggerom można:
- sprawdzać i zapobiegać dostawaniu się do bazy danych „nieodpowiednich danych”.
- zmieniać polecenia INSERT, UPDATE i DELETE lub w ogóle ich zaniechać w zależności od
tego, jakie informacje dostarczy nam trigger.
- monitorować aktywność działań na danych w bazie danych w czasie sesji z bazą danych.CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
CREATE TABLE konto (numer INT, ile DECIMAL(10,2));
CREATE TRIGGER konto_bi BEFORE INSERT ON konto
FOR EACH ROW SET @sum = @sum + NEW.ile;
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 40
Język SQL - funckje i operatory
Duża grupa wewnętrznych funkcji:
SUM, RAND, CONCAT, AVG, COUNT, MAX, MIN, SQRT ROUND, DATE, DATE_FORMAT, TIME_FORMAT,
TIME, SUBDATE, FLOOR, EXP, MOD, PI, SIN, RADIANS, UPPER, LOWER, ASCII, ORD, QUOTE
operatory:
BINARY, COLLATE
!
- (unary minus), ~ (unary bit inversion)
^
*, /, DIV, %, MOD
-, +, <<, >>
&, |, =, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
BETWEEN, CASE, WHEN, THEN, ELSE
NOT, &&, AND, XOR, ||, OR, :=
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 41
Aplikacja bazodanowa
Program komputerowy pośredniczący w wymianie danych między użytkownikiem a bazą danych
(za pośrednictwem SZBD).
1. Aplikacja stanowi ”najwyższy” element systemu bazodanowego.
2. Nie należy do SZBD ani do samej bazy danych.
3. Apliakcja musi się składać z interfejsu komunikacji z użytkownikiem (GUI lub CLI), w którego
skład wchodzą: formularze, raportów, mechanizm kwerend.
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 42
Więcej na temat ...
[ 1 ] Ramez Elmasri, Shamkant B. Navathe, Wprowadzenie do systemów baz danych, Helion, 2005
[ 2 ] Richard Stones, Neil Matthew, Bazy danych i MySQL. Od podstaw, Helion, 2003
[ 3 ] Mark Whitehorn, Bill Marklyn, Relacyjne bazy danych, Helion, 2003
[ 4 ] Luke Welling, Laura Thomson, MySQL. Podstawy, oficjalny podręcznik, Helion, 2004
[ 5 ] Michael Abbey, Michael Corey, Ian Abramson, Oracle9i. Przewodnik dla początkujących, Helion, 2003
[ 6 ] Scott Urman, Oracle9i. Programowanie w języku PL/SQL, Helion, 2003
[ 7 ] www.mysql.com, MySQL, podręcznik użytkownika, dokumentacja producenta oprogramowania
[ 8 ] www.oracle.com, Oracle 11g, podręcznik użytkownika, dokumentacja producenta oprogramowania
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 43
POLITECHNIKA WROCŁAWSKA
WROCŁAWSKIE CENTRUM SIECIOWO-SUPERKOMPUTEROWE
Relacyjne Bazy Danych
mgr inż. Ireneusz Tarnowski
e-mail: [email protected]
Ireneusz Tarnowski, Relacyjne Bazy Danych 26.02.2011 44