r08_t.pdf

(254 KB) Pobierz
Oto przyk³ady stylów nag³ówków:
Rozdział 8
Wprowadzenie do baz danych
W niniejszym rozdziale omówimy następujące tematy:
Pobieranie informacji z baz danych — wprowadzenie.
SQL i relacyjne bazy danych.
Podstawowe funkcje SQL
Jak wykorzystać MySQL w charakterze bazy danych dla skryptów PHP i filmów Flasha.
Zanim zaczniemy zgłębiać zagadnienia dotyczące baz danych, powinniśmy zastanowić się nad tym, w jaki
sposób możemy komunikować się z tymi bazami, wykonując zamierzone zadania.
Wszystko, czego musimy się nauczyć, by móc nawiązać kontakt z bazami danych, to język znany jako SQL
(wym. Sequel), który będziemy implementować poprzez popularną i silną bazę danych MySQL.
To, co tu zostało powiedziane jest lekkim zejściem z kursu, którym poruszaliśmy się dotychczas, omawiając
PHP. Jednakże, warto wytrwać
Wprowadzenie do SQL
SQL to akronim Structured Query Language (Język zapytań strukturalnych) i oznacza najważniejszy język
komunikacji i manipulacji bazami danych. Być może brzmi to nieco zatrważająco, ale w przeciwieństwie do
wielu języków programowania, SQL został wymodelowany na bazie języka angielskiego, co czyni jego
wyrażenia łatwymi w konstruowaniu i odczytywaniu.
Structured Query Language został opracowany w firmie IBM i pierwotnie współdziałał z prototypowym
systemem zarządzania relacyjnymi bazami danych (ang. Relational Database Management System – RDBMS),
ochrzczonego jako System R. Szczegółowe informacje o języku SQL regularnie pojawiały się w czasopismach
technicznych, a w roku 1979 Oracle wprowadził na rynek pierwszą komercyjną, powszechnie dostępną
implementację SQL. Od tamtej pory SQL stał się językiem bardzo popularnym i został zaakceptowany przez
przemysł jako standardowy język dostępu do baz danych.
Cóż to wszystko oznacza dla nas? Oznacza to, że gdy poświęcimy nieco czasu na naukę tego języka, zdobytą
wiedzę będziemy mogli wykorzystać w większości istniejących systemów baz danych. Można użyć go także do
zanudzania nielubianych znajomych, co jednak grozi agresją z ich strony.
W niniejszym rozdziale skupimy się na zasadach budowy instrukcji SQL, które zrozumie każdy serwer bazy
danych, wykonując nasze polecenia. Ponieważ SQL jest standardem, będzie to możliwe bez względu na
implementację. Cóż to znaczy? Znaczy to, że będziemy się tu koncentrować na budowie poprawnych wyrażeń
SQL, które powinny działać niezależnie od tego, z jaką implementacją bazy danych przyjdzie nam się zetknąć.
Zanim jednak wykorzystamy SQL, czy nawet zaczniemy rozważania na jego temat, musimy zatrzymać się na
chwilę nad teorią baz danych. Mówiąc ściślej, przyjrzymy się relacyjnym bazom danych, przyczynom ich
powstania oraz sposobom wykorzystania.
Relacyjne bazy danych
Model relacyjnej bazy danych opracował we wczesnych latach siedemdziesiątych doktor E. F. Codd. Dr Codd
był pracownikiem naukowym koncernu IBM, zajmującym się przez długie lata szukaniem sposobów obsługi
ogromnych ilości danych.
Najważniejszym problemem związanym z konwencjonalnymi metodami, wykorzystującymi tak zwane
hierarchiczne bazy danych, był wysoki stopień ich złożoności oraz wysokie wymagania w stosunku do
programisty, w zakresie zrozumienia sposobu fizycznego zapisu danych. Prowadziło to do poważnych trudności
1
w momencie zmiany struktury bazy danych lub nośnika, co często pociągało za sobą konieczność powtórnego
pisania aplikacji dostępu do danych.
W modelu relacyjnej bazy danych, dane są przechowywane w tablicach, z których każda zawiera określoną
liczbę rekordów. Jak można wnioskować na podstawie nazwy, dane zapisane w tablicach są powiązane
wzajemnymi relacjami, co stanowi bardziej logiczną metodę przechowywania informacji.
Historia MySQL w skrócie
MySQL opracowano w roku 1996, w szwedzkiej firmie TCX. Pomysł wziął się z zapotrzebowania na system
relacyjnej bazy danych, który byłby wydajny, elastyczny, szybki i zdolny do obsługi dużych ilości informacji.
Oto kilka spośród cech MySQL, które zdecydowały o jego ogromnym sukcesie:
Otwarte dostęp do kodu źródłowego
Kluczową cechą MySQL jest otwartość źródła, podobnie jak w starym, dobrym PHP. Oznacza to, że oprócz
wysokowydajnego systemu zarządzania bazami danych, mamy pełen dostęp do jego kodu źródłowego. Jeśli
istnieje funkcja, którą chcielibyśmy dodać do MySQL, nic nie stoi na przeszkodzie, by uczynić to samodzielnie,
modyfikując kod źródłowy, przy założeniu, że dysponujemy odpowiednią wiedzą techniczną.
Wsparcie
Rozwój Linuxa (systemu operacyjnego o otwartym źródle) w ostatnich latach zaowocował wzrostem zaufania
do produktów o otwartym dostępie do kodu źródłowego i zastosowania ich jako narzędzi pracy. Rzeczywiście,
większa część sieci Internet działa w oparciu o komputery zarządzane przez różne odmiany Linuxa. To zaś
doprowadziło do ogromnego wzrostu liczby użytkowników MySQL, tym samym zapewniając mu dalsze
wsparcie i rozwój.
MySQL jest często brany za formę języka Structured Query Langage. Tak naprawdę jednak, MySQL jako
narzędzie wykorzystuje, a często rozbudowuje, SQL do wykonywania operacji i manipulowania bazami danych.
Teoria bazy danych
Po lekturze poprzednich podpunktów nasza uwaga mogła ulec osłabieniu. Ale skupmy się. Zanim zaczniemy
zgłębiać tajniki MySQL, warto zdobyć nieco podstawowej wiedzy na temat teorii baz danych.
Spójrzmy na prosty, relacyjny model MySQL, nim przejdziemy do szczegółowego omawiania plszczególnych
części:
RYS. str. 254
Serwer MySQL
Baza danych
Tablica
Czegóż możemy dowiedzieć z powyższego rysunku? Widać tu, że pojedyncza instalacja MySQL może
obsługiwać wiele baz danych, zaś każda baza może składać się z pewnej liczby tablic. Każda tablica
przechowuje dane, które mogą, lecz nie muszą, pozostawać w relacjach z innymi tablicami w bazie. Tablice
składają się z kolumn i wierszy, podobnie jak arkusz kalkulacyjny, zaś punkt przecięcia kolumny z wierszem
nazywamy polem.
Każdy rekord w tablicy przechowywany jest w wierszu, a każda kolumna opatrzona jest nazwą i odpowiada
określonemu typowi przechowywanych danych. Pojedyncze pole przechowuje dane typu wyznaczonego w
kolumnie, przypisane do rekordu lub wiersza tablicy.
Jak wspomniano wcześniej, tablice w bazie danych mogą zawierać dane pozostające w relacjach lub całkowicie
niezależne od pozostałych tablic. Istnieje koncepcja zależności, którą można stosować w odniesieniu do danych
w MySQL, ale nie mieści się ona w tematyce niniejszego, krótkiego wstępu.
SQL na start...
W niniejszej sekcji będziemy dyskutować o wykorzystaniu języka Structured Query Language w tworzeniu i
manipulowaniu bazami danych. Omówimy tu najczęściej wydawane polecenia SQL oraz ich współdziałanie z
2
wybranymi systemami zarządzania bazami danych. Dyskusję podzielimy na podpunkty, ukierunkowane na
różne rodzaje instrukcji SQL.
W kolejnym rozdziale skupimy się na MySQL jako systemie zarządzania bazą danych, a także na
możliwościach dostępu i manipulowania zarządzanymi przez ów system danymi za pomocą PHP. Choć MySQL
wykorzystuje język SQL do wykonywania operacji na bazach danych, to dodatkowo poszerza go, wprowadzając
nowe instrukcje, nieobecne w samym języku. Z tego też powodu, szczególną uwagę będziemy przywiązywać do
poleceń nie będących częścią standardowego SQL, na wypadek gdybyśmy, próbując wykorzystać je w stosunku
do bazy danych Microsoft, odeszli z kwitkiem.
Po przejściu przez wstęp i rys historyczny, możemy zająć się poważniejszymi zagadnieniami, przystępując do
poznawania tego niezwykle użytecznego języka.
Ci, którzy czują się na siłach od razu przystąpić do wykorzystywania MySQL, powinni zająć się teraz jego
instalacją w swoim systemie, co pozwoli im wykonywać zadania na bieżąco. Pełny instruktaż instalacji i
używania MySQL można znaleźć w Dodatku A. Kto jednak nastawia się wyłącznie na lekturę, niech wyłączy
komputer, pozostawiając jedynie włączoną lampkę nocną...
Tworzenie bazy danych
Nie próbujmy tańczyć, nie umiejąc chodzić. Zanim przechowamy jakiekolwiek informacje w naszej bazie
danych, musimy zacząć od jej utworzenia. Niektórzy pewnie myślą, że będziemy tu budować ogromnego,
relacyjnego potwora — nic bardziej mylnego. Wystarczy nam do tego polecenie CREATE — to przecież takie
łatwe!
Polecenie CREATE to główne narzędzie konstrukcyjne języka SQL, a służy ono do tworzenia zarówno baz
danych, jak i tablic — do tych drugich przejdziemy za moment.
Składnia polecenia CREATE jest jedną z najprostszych, jakie przyjdzie nam napotkać:
CREATE DATABASE nazwabazydanych;
...gdzie nazwabazydanych jest nazwą tworzonej bazy.
Należy zwrócić uwagę, że w zaprezentowanym powyżej przykładzie polecenia SQL użyte zostały wyłącznie
wielkie litery i będzie to zasada obowiązująca także w dalszej części rozdziału. Nie jest to obligatoryjne — SQL
akceptuje również małe litery — chodziło tu wyłącznie o zwrócenie naszej uwagi na składnię języka.
Szczególną uwagę powinniśmy zwrócić na znak średnika, znajdujący się na końcu zaprezentowanego
wyrażenia. A każdym systemie baz danych oznacza on koniec bieżącego wyrażenia, co ułatwia podział długich
wyrażeń SQL i uczynienie ich czytelniejszymi. Użyteczność tej cechy stanie się widoczna nieco dalej.
No dobrze, wprowadźmy zatem polecenie. Kto zaglądał do pierwszego dodatku, ten zetknął się już z monitorem
MySQL — jest to nasze narzędzie do sterowania MySQL. Najpierw musimy, z linii poleceń, wpisać to, co
widać na rysunku poniżej. Po wpisaniu cd \mysql, a następnie bin\mysql uruchomiony zostanie monitor MySQL
gotów do wykonywania naszych poleceń!
Teraz użyjmy monitor do utworzenia bazy danych o nazwie phpforflash:
CREATE DATABASE phpforflash;
Będziemy wykorzystywać tę bazę do przechowywania informacji, przez całą pozostałą część niniejszego
rozdziału. Kiedy wpiszemy to polecenie w MySQL (trzeci wiersz od końca, na następnym rysunku),
powinniśmy otrzymać następujący wynik:
Aby obejrzeć utworzoną bazę, wpisujemy po prostu:
SHOW DATABASES;
Zanim jednak będziemy mogli w jakikolwiek sposób spożytkować naszą bazę danych, musimy upewnić się, że
system jej obsługi jest poinformowany o tym, że zamierzamy jej użyć w kolejnych operacjach, gdyż wiele baz
danych może działać jednocześnie. W tym celu należy wydać polecenie USE, którego skłądnie widzimy
poniżej:
3
USE nazwabazydanych;
A zatem, aby wyselekcjonować naszą bazę, musimy wprowadzić następujące polecenie w monitorze MySQL:
USE phpforflash;
Jest to powszechnie pomijany krok, zarówno na etapie nauki, jak i użytkowania SQL, mogący powodować
pewne, bardzo frustrujące problemy podczas prób dokonania manipulacji nowo utworzoną bazą. Każdy
popełnia ten błąd przynajmniej raz i Autor nie jest tu wcale wyjątkiem.
Pamiętajmy, że każde polecenie MySQL kończy się znakiem średnika.
Tworzenie tablicy
Skoro wiemy już jak tworzyć bazę danych, zapewne zechcemy umieścić w niej tablice, które są właściwym
miejscem przechowywania informacji. Możemy tego dokonać za pomocą polecenia CREATE, o którym już
mówiliśmy, ale musimy to zrobić w nieco inny sposób.
Ogólna składnia polecenia tworzącego tablicę jest odrobinę bardziej złożona niż w przypadku bazy danych.
Wynika to z konieczności definiowania nazw i typu danych dla wszystkich kolumn w tablicy.
W MySQL typ danych oznacza rodzaj informacji, jakie można przechowywać w danej kolumnie — mogą to
być łańcuchy znakowe ("Hello"), liczby (174) lub jakiekolwiek inne dane, takie jak godzina czy data. Nie
można jednak przechowywać łańcuchów w kolumnie przeznaczonej dla liczb i na odwrót. Pozostaje to w
kontraście ze zmiennymi we Flashu czy PHP, które nie muszą mieć zdefiniowanego typu, a typ można zmieniać
w ciągu skryptu, dostosowując go do aktualnych potrzeb. Niektóre spośród typów danych dostępnych w
MySQL omówimy w dalszej części tej sekcji.
Ogólna składnia polecenia CREATE TABLE wygląda następująco:
CREATE TABLE nazwatabeli ( definicje_kolumn );
Parametr nazwatabeli to nazwa, którą nadajemy tworzonej tabeli, a definicje_kolumn opisują poszczególne
kolumny. Element definicje_kolumn w powyższym poleceniu zawiera jedną lub więcej następujących struktur,
rozdzielanych przecinkami:
nazw_kolumny typdanych [NOT NULL | NULL] [DEFAULT def_val] [AUTO_INCREMENT]
[PRIMARY KEY]
Większość elementów tej składni nie wymaga wyjaśnień, z uwagi na ich nazwy. Na przykład, nazwa_kolumny
to miano kolumny, którą chcemy utworzyć, a typ określa typ przechowywanych w niej danych.
Zwróćmy jednak uwagę, że nie jest to składnia kompletna. Przykład został ograniczony jedynie do najczęściej
wykorzystywanych opcji. Zainteresowani wszystkimi dostępnymi możliwościami powinni odwołać się do
dokumentacji technicznej MySQL.
Typy danych
Jakich typów danych możemy używać?
No cóż, zależy to w dużej mierze w jaki sposób zamierzamy je zaimplementować. Podczas, gdy niektóre typy
danych są ogólnie stosowane we wszystkich systemach baz danych obsługujących SQL, inne należą do kategorii
typów własnych i dostępne są tylko dla specyficznych systemów.
Jednakże, wymienione poniżej typy danych są używane powszechnie, bez względu na wybór systemu
zarządzania bazą danych. Aby uzyskać pełną listę typów obsługiwanych przez określony system, należy zajrzeć
do dołączonej dokumentacji technicznej — musi ona gdzieś tam być!
W każdym razie, dość gadania! Zajmijmy się typami danych...
4
INTEGER Wartość numeryczna, przechowująca liczbę całkowitą (czyli nie ułamkową). Zakres: -
2.147.483.648 > 2.147.483.648
VARCHAR(n) Pole znakowe (łańcuchy) o zmiennej długości, ale nie większej niż n znaków.
Maksymalna długość pola VARCHAR to 255 znaków.
CHAR(n) Typ znakowy (łańcuch) o dokładnej długości n znaków. Maksymalna długość pola
CHAR wynosi 255 znaków.
TEXT Typ przechowujący dane tekstowe, o maksymalnej długości 65535 znaków.
MEDIUMTEXT Typ przechowujący dane tekstowe, o maksymalnej długości 16.777.215 znaków.
DATETIME
Typ stosowany do przechowywania informacji o dacie i godzinie, w formacie 'RRRR-
MM-DD GG:MM:SS'
TIMESTAMP
Typ przechowujący informacje o dacie i godzinie w formacie 'RRRRDDMMGGMMSS'.
Jeśli w poleceniu INSERT lub UPDATE nie zostanie podana żadna wartość albo gdy
ustawimy ją na NULL, zawartość pola TIMESTAMP przyjmie bieżące ustawienia
czasu.
Jest to użyteczna funkcja, której można użyć jako prostego licznika ostatnich
uaktualnień, nie martwiąc się o precyzyjne przypisywanie wartości.
Wiele spośród wymienionych tu typów można rozpoznać jako typy stosowane w skryptach PHP!
Elementy widoczne po typdanych stanowią bardzo istotną część SQL. Pozwalają nam one bowiem określać
zasady zachowania kolumn. Zwróćmy uwagę, że zostały one ujęte w nawiasy kwadratowe tylko dlatego, że są
one elementami opcjonalnymi: nawiasy te nie są składnikiem polecenia SQL.
Oto właściwości poszczególnych elementów:
NOT NULL | NULL Użycie NOT NULL lub NULL decyduje o tym, czy wartości mają być podane we
wszystkich wierszach danej kolumny czy też można je pominąć.
Jeśli wariant nie zostanie wyraźnie zdefiniowany w instrukcji, wówczas
przyjmowane jest ustawienie NULL .
DEFAULT def_value Element ten pozwala wskazać wartość domyślną dla danej kolumny. Jeśli dodamy
wiersz, dla którego w danej kolumnie nie została zdefiniowana żadna wartość,
wówczas przypisana zostanie wartość def_value .
AUTO_INCREMENT Za pomocą elementu AUTO_INCREMENT możemy wskazać, że jeśli dla danej
kolumny nie zostanie ustalona określona wartość, wówczas wartość powinna być o
1 większa, niż dotychczas najwyższa w tej kolumnie.
Oczywiście, ma to sens jedynie wtedy, gdy w kolumnie przechowujemy
numeryczne dane, a kolumna ta pełni rolę podstawowego klucza tabeli.
PRIMARY_KEY
Element PRIMARY_KEY służy nam do wskazania określonej kolumny jako
podstawowego klucza tablicy.
Ustanowienie takiego klucza podnosi wydajność operacji wyszukiwania czy
sortowania wykonywanych na tablicy. Jednak do roli klucza można wyznaczyć
jedynie taką kolumnę, co do której mamy pewność, że każdy jej wiersz zawiera
inną, unikalną wartość.
Słuszną praktyką jest upewnienie się, że każda tablica otrzymała kolumnę
PRIMARY_KEY , nawet jeśli mielibyśmy utworzyć tę kolumnę wyłącznie w tym
celu. Wynika to z możliwości nadania specyficznych numerów lub wartości
poszczególnym rekordom, jaką daje nam użycie tej kolumny.
Z elementami tymi będziemy się spotykać podczas lektury dalszych rozdziałów tej książki, a zatem warto
zaznajomić się z nimi, już na tym wczesnym etapie.
Po omówieniu podstawowych zagadnień, przekonajmy się, czy potrafimy utworzyć naszą pierwszą tablicę.
Warto przypomnieć, że opisywane czynności można wykonywać w monitorze MySQL na bieżąco lub
pozostawić ćwiczenia praktyczne do chwili powrotu do PHP. Bieżący rozdział wykorzystamy do ręcznego
utworzenia podstaw systemu zarządzania bazą danych, który będziemy budować w następnym rozdziale, a który
pozwoli nam przechowywać wiadomości w bazie danych i dynamicznie wczytywać je do Flasha.
Poniższy przykład poświęcimy tablicy sekcji wiadomości w bazie danych. Rozważając, jakiego rodzaju
informacje moglibyśmy w niej przechowywać, powinniśmy wziąć pod uwagę co najmniej te, które wymieniamy
poniżej:
Tytuł wiadomości
5
Zgłoś jeśli naruszono regulamin