Koncepcje relacyjnych baz danych Jedną z najwaŝniejszych cech nowoczesnych języków programowania lub narzędzi programistycznych jest zdolność współpracy z bazą danych. Jest to spowodowane tym, Ŝe systemy zarządzania bazami danych posiadają wiele bardzo wydajnych i niezwykle uŝytecznych mechanizmów zarządzania danymi, jak na przykład indeksowanie, relacje pomiędzy danymi, obsługa transakcji, kaskadowe operacje wykonywane na danych i wiele innych. PHP pozwala na dostęp do danych przy uŝyciu bogatego zestawu funkcji związanych z bazami danych. Przez bazę danych (w uproszczeniu) rozumiemy uporządkowany zbiór danych, a przez system bazy danych bazę danych oraz oprogramowanie umoŝliwiające operowanie na niej. Baza danych jest przechowywana na nośnikach komputerowych. Z punktu widzenia informatyki baza danych jest abstrakcyjnym modelem wybranego fragmentu rzeczywistości (często nazywanym miniświatem ).
Relacyjne bazy danych są obecnie najczęściej wykorzystywanym typem baz danych. Opierają się na teoretycznych podstawach algebry relacyjnej. Relacyjne bazy danych składają się z relacji, zwanych zwyczajowo tabelami danych lub po prostu tabelami. Tabela 1. Klienci KlientID Nazwisko i imię Adres Miejscowość 1 Kowalski Jan Leśna 12 Kluczbork 2 Bielska Barbara Krzywa 2 Olesno 3 Warszawski Paweł Krótka 1 Opole KaŜda kolumna tabeli Klienci posiada wyróŝniającą ją nazwę i zawiera inny rodzaj danych (przypisany inny typ). Kolumny nazywane są czasami polami lub atrybutami. Natomiast kaŝdy wiersz tabeli odpowiada innemu klientowi. KaŜdy wiersz w tabeli ma te same atrybuty. Wiersze nazywa się rekordami albo krotkami.
KaŜdy wiersz tabeli zawiera zbiór pojedynczych wartości odpowiadających kolumnom. KaŜda z tych wartości musi być tego samego typu, jak przypisano kolumnie. Aby odnaleźć poszczególnego klienta w tabeli, konieczne staje się znalezienie sposobu jego jednoznacznej i skutecznej identyfikacji, np. dlatego, Ŝe osób o nazwisku Kowalski moŝe być kilka. W tym celu naleŝy w tabeli umieścić unikalne pole identyfikujące klienta. W powyŝszym przypadku pole to nazywa się KlientID. Ty samym sztucznie nadany numer identyfikacyjny gwarantuje unikalność poszczególnych rekordów. Pole identyfikujące poszczególne rekordy nazywa się kluczem podstawowym lub po prostu kluczem. Klucz moŝe się teŝ dać z kilku pól, np. Nazwisko i Adres -> Kowalski Jan z ulicy Leśnej 12, co i tak nie gwarantuje unikalności. Bazy danych składają się często z kilku tabel i wykorzystują klucze do uwidocznienia odwołań między dwiema oddzielnymi tabelami. Do naszej bazy danych dołączamy drugą tabelę zawierającą informację o np. wypoŝyczonych przez klientów filmach z wypoŝyczalni DVD.
KaŜdy wiersz tabeli WypoŜyczenia odpowiada jednemu wypoŝyczeniu dokonanemu przez klienta. Tabela ta zawiera równieŝ kolumnę KlientID, dzięki czemu wiemy, kim jest klient, który wypoŝyczył film. Tabela 1. Klienci KlientID Nazwisko_i_imię Adres Miejscowość 1 Kowalski Jan Leśna 12 Kluczbork 2 Bielska Barbara Krzywa 2 Olesno 3 Warszawski Paweł Krótka 1 Opole Tabela 2. WypoŜyczenia WypoŜyczenieID KlientID Opłata Data 1 3 8.00 2004-02-01 2 1 6.00 2004-03-12 3 2 6.00 2004-01-23 4 2 8.00 2004-04-01 Analizując teraz wypoŝyczenia np., dla którego WypoŜyczenieID jest równe 2, wiemy, Ŝe zostało zrealizowane przez klienta, którego KlientID jest równe 1, czyli Kowalskiego Jana (tabela Klienci).
PowyŜszą relację określa się mianem klucza obcego. KlientID jest w tabeli Klienci - kluczem podstawowym, ale jeśli to pole pojawi się w innej tabeli (tu WypoŜyczenia), to nosi nazwę klucza obcego. Zbiór projektów wszystkich tabel, wchodzących w skład bazy danych nazywa się schematem bazy danych. Schemat powinien zawierać: - projekty tabel z oznaczeniami kolumn, - typy danych przypisanych kaŝdej kolumnie, - wyróŝnione klucze podstawowe i klucze obce Schematy baz danych mogą mieć formę diagramów (encji i relacji) lub formę tekstową, np.: Klienci(KlientID, Nazwisko_i_imię, Adres, Miejscowość) WypoŜyczenia(WypoŜyczenieID, KlientID, Opłata, Data) Podkreślenie w powyŝszym schemacie nazwy kolumny oznacza wyróŝnienie klucza podstawowego tabeli, natomiast zacienionym tekstem podkreślone są te kolumny, w których zapamiętane będą klucze obce.
PowyŜsza relacja określa związek pomiędzy konkretnym wierszem tabeli WypoŜyczenia i określonym wierszem tabeli Klienci. Teoria relacyjnych baz danych uwzględnia istnienie trzech typów relacji, klasyfikujących liczbę wartości po kaŝdej ze stron relacji. I tak wyróŝnia się relacje: - jeden do jednego, - jeden do wielu, - wiele do wielu Relacja jeden do jednego po kaŝdej stronie moŝe występować tylko jedna wartość. Tak by było, gdyby z tabeli Klienci wydzielić odrębną tabelę zawierającą adresy. Wówczas tabela Klienci mogłaby posiadać klucz obcy z tabeli Adresy. Krótko mówiąc: oznacza to, Ŝe jeden wiersz jednej tabeli połączony jest kluczem z jednym wierszem innej tabeli. Relacja jeden do wielu jeden wiersz tabeli połączony jest z jednym lub wieloma wierszami drugiej tabeli. W analizowanym przykładzie WypoŜyczalni, jeden klient moŝe zrealizować klika wypoŝyczeń. Tak teŝ zrobiła Barbara Bielska. W tym przypadku tabela z wieloma wierszami (tabela
WypoŜyczenia) zawiera kolumnę z kluczem obcym pochodzącym z tabeli z jednym wierszem (tj. tabeli Klienci z wierszem zawierającym identyfikator KlientID). Dlatego teŝ w tabeli WypoŜyczenia umieszczono kolumnę KlientID, w celu zastosowania tej relacji. Relacja wiele do wielu wiele wierszy jednej tabeli jest połączonych z wieloma wierszami innej. Gdyby na przykład powstały dodatkowo dwie tabele Filmy i Aktorzy, mogłaby zaistnieć sytuacja, w której w jednym z filmów grałoby dwóch aktorów, przy czym kaŝdy z nich mógłby grać jeszcze w innych filmach (patrz Radosław Pazura). Wówczas tego typu relacje są zwykle upraszczane poprzez utworzenie trzeciej tabeli: Filmy_Aktorzy. Tabela ta zawierałaby tylko pary kluczy obcych, pochodzących z dwóch pozostałych tabel i określałaby, który z aktorów (sam lub z innym aktorem) grał w danym filmie.
Tworzenie internetowej bazy danych Tworzenie bazy danych MySQL przeznaczonej do udostępniania na stronach WWW przebiega etapami: Utworzenie bazy danych (podanie nazwy); Zarejestrowanie uŝytkowników i nadanie im przywilejów; Prowadzenie do systemu przywilejów MySQL; Utworzenie tabel w bazie danych; Określenie typów kolumn w tabelach; Nadanie wstępnych wartości w komórkach tabel Jako przykład przy tworzeniu bazy danych MySQL posłuŝy np. księgarnia internetowa KsiąŜkorama. Schemat takiej bazy danych przedstawia się następująco: Klienci(KlientID, Nazwisko, Adres, Miejscowosc) Zamowienia(ZamowienieID, KlientID, Wartość, Data) KsiąŜki(ISBN, Autor, Tytul, Cena) Pozycje_zamowione(ZamowienieID, ISBN, Ilosc) Recenzje_ksiazek(ISBN, Recenzja) Nazwy pól będącymi kluczami podstawowymi są podkreślone linią ciągłą, obce klucze są zacienione.
Logowanie do serwera MySQL (monitor) W celu zalogowania się do serwera MySQL naleŝy przejść do wiersza poleceń systemu operacyjnego i wpisać komendę: > mysql h nazwa_hosta(komputera) u uŝytkownik p Znak zachęty moŝe wyglądać inaczej w zaleŝności od systemu operacyjnego i powłoki, na której się pracuje. Opcji h uŝywa się w celu wskazania komputera, do którego ma nastąpić połączenie (na którym zainstalowano serwer MySQL). Opcja u stosowana w celu wskazania identyfikatora uŝytkownika. Opcja p informuje serwer o logowaniu z uŝyciem hasła. Jeśli polecenie mysql zostanie zrealizowane prawidłowo powinien się uruchomić monitor MySQL oraz wyświetlić komunikat podobny do poniŝszego: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 759 to server version: 4.0.14 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>
Tworzenie baz danych System baz danych MySQL jest w stanie obsługiwać wiele baz danych jednocześnie. Zazwyczaj jedna aplikacja współpracuje z jedna bazą danych. Polecenie tworzące bazę danych w wierszu poleceń MySQL (w monitorze) jest następujące: mysql> create database nazwa_bazy; Querry OK, 1 row affected (0.06 sec) Oznacza to bezbłędne wykonanie operacji. W przypadku niepojawienia się napisu naleŝy upewnić się czy na końcu polecenia wpisano ; (średnik). Znak ten informuje serwer MySQL o zakończeniu! wpisywania polecenia i konieczności jego wykonania. UŜytkownicy i ich przywileje System MySQL moŝe obsługiwać wielu uŝytkowników. UŜytkownik root wykorzystywany jest wyłącznie do administracji systemu (względy bezpieczeństwa). Dla kaŝdego uŝytkownika systemu MySQL administrator przyznaje konto oraz nadaje hasło dostępu, które nie muszą być takie same jak login i hasło przy logowaniu się do systemu operacyjnego.
Przywileje Jedną z najwaŝniejszych cech MySQL jest obsługa specyficznego systemu przywilejów, a więc posiadanie przez uŝytkownika prawa do wykonywania określonych operacji na zasobach bazy danych. Idea przywilejów zbliŝona jest do koncepcji określania praw dostępu do plików. Rejestrując nowego uŝytkownika MySQL administrator nadaje mu odpowiednie przywileje, w celu wyszczególnienia czynności, które będzie wykonać na zasobach bazy danych. W celu zwiększenia bezpieczeństwa systemu stosowana jest zasada najmniejszego przywileju. Brzmi ona następująco: UŜytkownik lub proces powinien posiadać minimalny zbiór przywilejów potrzebnych do wykonania przypisanego mu zadania. Na przykład do wysłania zapytania do bazy danych ze strony WWW uŝytkownik nie potrzebuje wszystkich przywilejów, którymi dysponuje uŝytkownik root. NaleŜy więc utworzyć nowego uŝytkownika i nadać mu tylko przywileje niezbędne do uzyskania dostępu do bazy danych.
Rejestrowanie uŝytkownika: polecenie GRANT Polecenia GRANT i REVOKE słuŝą do nadawania i odbierania uŝytkownikom MySQL praw na czterech poziomach uprzywilejowania: Globalny Baza danych Tabela Kolumna Polecenie GRANT słuŝy do tworzenia nowych uŝytkowników i nadawania im przywilejów. Składnia Składnia polecenia GRANT jest następująca: GRANT przywileje [kolumny] ON obiekt TO identyfikator_uzytkownika [IDENTIFIED BY haslo ] [WITH GRANT OPTION] Klauzule w nawiasach są opcjonalne. Polecenie przywileje ma postać listy przywilejów oddzielonych przecinkami.
Opcjonalny parametr kolumny uŝywa się w celu wskazania kolumny lub listy kolumn, do których podane przywileje zostaną zastosowane. Parametr obiekt wskazuje bazę lub tabelę, do której zastosowane zostaną wyróŝnione przywileje. W celu nadania przywilejów na wszystkie bazy danych parametr obiekt powinien przyjąć wartość *.*. Wówczas wszystkie przywileje są nadane na poziomie globalnym. MoŜna teŝ wskazać wszystkie tabele w danej bazie: nazwa_bazy.* albo nazwę konkretnej tabeli nazwa_bazy.nazwa_tabeli. Parametr nazwa_uzytkownika powinien wskazywać identyfikator, za pomocą którego uŝytkownik loguje się do serwera MySQL. Wartością parametru hasło jest hasło dostępu, którym powinien posługiwać się wskazany uŝytkownik w trakcie logowania do serwera MySQL. Dodanie opcji WITH GRANT OPTION spowoduje, Ŝe uŝytkownik będzie mógł nadawać innym uŝytkownikom takie przywileje, jakie on sam posiada.
Informacje dotyczące nadanych przywilejów zapamiętywane są w czterech tabelach systemowych znajdujących się w bazie danych o nazwie mysql. Tabele te to: mysql.user, mysql.db, mysql.tables_priv, mysql.columns_priv, dzięki którym moŝna zmieniać przywileje bezpośrednio w nich, zamiast polecenia GRANT. Typy i poziomy przywilejów MySQL posiada trzy typy przywilejów: Przywileje nadawane zwykłym uŝytkownikom; Przywileje dla administratorów; Przywileje specjalne. Przywileje przeznaczone dla zwykłych uŝytkowników odwołują się bezpośrednio do konkretnych rodzajów poleceń języka bazodanowego SQL i określają tryb wykonania. Przywileje dla uŝytkowników Przywilej Zastosowanie Opis SELECT tabele, kolumny Wyszukuje wiersz (rekord) z tabel. INSERT tabele, kolumny Wstawia nowy wiersz do tabel. UPDATE tabele, kolumny Zmienia wartość wierszy w tabelach. DELETE tabele Usuwanie z tabeli istniejących wierszy. INDEX tabele Tworzy i usuwa indeksy w tabelach. ALTER tabele Dokonuje zmian w strukturze istniejących tabel (np. zmiana nazwy). CREATE baza, tabele Tworzenie nowych baz danych i tabel. DROP baza, tabele Pozwala na usuwanie baz lub tabel.
Przywilej ALTER moŝe być uŝywany do obchodzenia systemu przywilejów przez zmianę nazw tabel, choć jest on potrzebny większości uŝytkownikom. Administrator powinien samodzielnie podejmować decyzję o nadaniu, lub nie, tego przywileju uŝytkownikom. W poniŝszej tabeli przedstawiono przywileje przeznaczone dla administratorów. Przywileje dla administratorów Przywilej Opis Pozwala na powtórne załadowanie tabel zawierających informacje na temat praw dostępu oraz na odświeŝanie RELOAD przywilejów, listy nazw łączących się komputerów, dziennika zdarzeń i tabel. SHUTDOWN UmoŜliwia zakończenie serwera MySQL. Pozwala na śledzenie procesów wykonywanych przez PROGRESS serwer i ich przerywanie. Pozwala na wczytywanie danych z plików do tabel i FILE odwrotnie. Istnieje moŝliwość nadania opisanych przywilejów uŝytkownikom nie mającym statusu administratora, jednak naleŝy tego dokonać z zachowaniem najwyŝszej ostroŝności. Zwykłemu uŝytkownikowi nie powinno się zwłaszcza nadawać przywilejów RELOAD, SHUTDOWN i PROCESS.
Przywilej FILE jest bardzo waŝny dla uŝytkowników, gdyŝ daje moŝliwość wstawiania danych bezpośrednio z plików do tabel, co pozwala zaoszczędzić czas, konieczny na ręczne wpisywanie kolejnych wartości. Przywilej FILE moŝe takŝe zostać wykorzystany do załadowania wszelkich plików, które widzi serwer MySQL, np. pliku bazy naleŝącej do innego uŝytkownika czy pliku zawierającego hasła dostępu. MySQL posiada takŝe dwa specjalne przywileje, przedstawione poniŝej: Przywileje specjalne Przywilej Opis Nadaje wszystkie przywileje opisane w tabelach ALL przywilejów dla uŝytkowników i administratorów. Jest on równowaŝny przywilejowi ALL PRIVILEGES. Nie nadaje Ŝadnych przywilejów. Powoduje zarejestrowanie uŝytkownika i pozwala mu na USAGE załogowanie się, lecz jakiekolwiek inne czynności są dla niego niedostępne. Odpowiednie przywileje nadawane są zwykle później.
Przeciwieństwem polecenia GRANT jest polecenie REVOKE, uŝywane w celu odebrania uŝytkownikowi określonych przywilejów. Jego składnia jest bardzo podobna do składni polecenia GRANT: REVOKE przywileje [kolumny] ON obiekt FROM identyfikator_uzytkownika JeŜeli do polecenia GRANT dołączono opcję WITH GRANT OPTION, wówczas przywilej ten moŝna cofnąć w następujący sposób: REVOKE GRANT OPTION ON obiekt FROM identyfikator_uzytkownika Przykłady uŝycia poleceń GRANT i REVOKE. Aby zarejestrować uŝytkownika mającego status administratora naleŝy w monitorze MySQL wpisać: mysql> grant all -> on * -> to Fred identified by Sq14aQ -> with grant option; Polecenia te spowodują nadanie wszystkich przywilejów na wszystkie bazy danych uŝytkownikowi o identyfikatorze Fred, posługującemu się hasłem Sq14aQ oraz umoŝliwi nadanie dowolnego przywileju innym uŝytkownikom.
W przypadku konieczności wyeliminowania tego uŝytkownika, naleŝy to zrobić w następujący sposób: mysql> revoke all -> on * -> from Fred; Zarejestrowanie uŝytkownika, który nie będzie posiadał Ŝadnych przywilejów: mysql> grant usage -> on ksiazki.* -> to zosia identified by magic123 ; Po rozmowie z Zosią wiadome jest, Ŝe będzie ona korzystać z bazy danych, moŝna jej nadać odpowiednie przywileje: mysql> grant select, insert, update, delete, index, create, alter, drop -> on ksiazki.* -> to zosia; Kiedy Zosia nie będzie juŝ potrzebowała dostępu do bazy danych, moŝna jej odebrać wszystkie przywileje: mysql> revoke all -> on ksiazki.* -> from zosia;
Rejestrowanie uŝytkownika łączącego się z Internetu Czasem staje się konieczne zarejestrowanie uŝytkownika, który łączy się z bazą danych poprzez stronę WWW zawierającą skrypty PHP. RównieŜ tutaj naleŝy stosować metodę najmniejszego przywileju. Trzeba więc rozstrzygnąć, jakie operacje ma wykonywać skrypt PHP. W większości przypadków wystarczą przywileje SELECT, INSERT, UPDATE i DELETE wg poniŝszego przykładu: mysql> grant select, insert, update, delete -> on ksiazki.* -> to ksiazkorama identified by haslo ; Wylogowanie się uŝytkownika Wylogowanie się uŝytkownika z serwera MySQL jest dokonywane za pomocą polecenia quit;. Zalecane jest ponowne załogowanie się jako uŝytkownik internetowy i sprawdzenie poprawności działania bazy danych.
UŜywanie odpowiedniej bazy danych Po zalogowaniu przez uŝytkownika do serwera MySQL, pierwszą czynnością, jaką naleŝy wykonać jest wskazanie bazy danych, która zostanie wykorzystana. Stosuje się wówczas polecenie: mysql> use nazwa_bazy; Tę samą operację moŝna wykonać juŝ podczas logowania się do serwera: > mysql nazwa_bazy h nazwa_komp u uzytkownik -p W omawianym przykładzie księgarni internetowej będzie to baza Ksiazki: mysql> use ksiąŝki; Po wykonaniu tego polecenia MySQL zwróci następujący komunikat: Database changed Jeśli przed przystąpieniem do pracy nie zostanie wybrana Ŝadna baza danych, serwer wyświetli komunikat o błędzie: ERROR 1046: No Database Selected
Tworzenie tabel bazy danych Jednym z etapów tworzenia bazy danych jest konstrukcja tabeli. W tym celu stosuje się polecenie CREATE TABLE o składni: mysql> CREATE TABLE nazwa_tabeli(kolumny); Parametr nazwa_tabeli powinien określać nazwę tabeli, która ma zostać utworzona. Parametr kolumny powinien mieć postać listy kolumn oddzielonych przecinkami, jakie będzie zawierać nowa tabela. KaŜda kolumna musi być określona przez podanie jej nazwy i typu danych. Przykład tworzenia tabeli Klienci: mysql> create table klienci -> (klientid int unsigned not null auto_increment primary key, -> nazwisko char(30) not null, -> adres char(40) not null, -> miejscowosc char(20) not null -> ); Query OK, 0 rows affected (0.00 sec)
Przedstawione polecenia (za pomocą języka SQL), tworzące tabele bazy danych mogą być zawarte w pliku nazwa_pliku.sql (zakłada się, Ŝe nazwa_pliku.sql ma tę samą lokalizację, co aplikacja mysql). Wówczas utworzenia tabeli moŝna równieŝ dokonać podczas logowania do serwera: > mysql h nazwa_komp u uŝytkownik D nazwa_bazy p < nazwa_pliku.sql Znaczenie dodatkowych atrybutów jest następujące: NOT NULL oznacza, Ŝe pole, przy którym stoi ten atrybut musi mieć w kaŝdym wierszu jakąś wartość; jeśli atrybut został pominięty, pola tego wiersza mogą być puste. AUTO_INCREMENT atrybut nadawany kolumnom, które muszą być indeksowane automatycznie. PRIMARY KEY oznacza, Ŝe wskazana kolumna jest kluczem podstawowym tabeli i posiada unikalne wartości, i to właśnie dzięki automatycznie indeksującemu atrybutowi AUTO_INCREMENT. Atrybut UNSIGNED wpisany za identyfikatorem typu całkowitoliczbowego oznacza, Ŝe kolumna moŝe zawierać dane tylko nieujemne.
Typy danych w kolumnach W MySQL rozróŝnia się trzy typy danych: liczbowy, czasu i daty oraz łańcuchowy. Typy te posiadają takŝe szereg podtypów. Typy liczbowe dzielą się na całkowitoliczbowe i zmiennoprzecinkowe. Typy całkowitoliczbowe (M zakres max. szerok. wyświetlania) Typ Zakres Bajty Opis TINYINT[(M)] -127..128 lub 0..255 1 Bardzo małe liczby całkowite BIT Synonim TINYINT BOOL Synonim TINYINT SMALLINT[(M)] -32768..32767 lub Małe liczby 2 0..65535 całkowite MEDIUMINT[(M)] -8388608..8388607 lub Średnie liczby 3 0..16777215 całkowite INT[(M)] -2 31..2 31-1 lub 0..2 32-1 4 Zwykłe liczby całkowite INTEGER[(M)] Synonim INT BIGINT[(M)] -2 63..2 63-1 lub 0..2 64-1 8 DuŜe liczby całkowite
Typy zmiennoprzecinkowe (D to min(30,m-2)); 2, bo, i znak dla całkowitej części danej liczby Typ Zakres Bajty Opis FLOAT(precyzja) FLOAT[(M, D)] DOUBLE[(M, D)] DOUBLE PRECISSION[(M, D)] REAL[(M, D)] ZaleŜny od precyzji ±1.175494351E-38 ±3.402823466E+38 4 lub 8 ±1.7976931348623157E-308 ±2.2250738585072014E+308 8 j.w. j.w. DECIMAL[(M, D)] róŝny M+2 4 Pojedyncza lub podwójna precyzja Pojedyncza precyzja=float(4) Podwójna precyzja=float(8) Synonim DOUBLE[(M, D)] Synonim DOUBLE[(M, D)] Liczba przecinkowa jako zmienna typu CHAR, M szerokość wyświetlania NUMERIC[(M, D)] j.w. Synonim DECIMAL DEC[(M, D)] j.w. Synonim DECIMAL Typy daty i czasu. Typy daty i czasu Typ Zakres Opis DATE 1000-01-01 do 9999-12-31 Format: RRRR-MM-DD TIME -838:59:59 do -838:59:59 Format: GG:MM:SS DATETIME 1000-01-01 00:00:00 do Format: RRRR-MM-DD 9999-12-31 23:59:59 GG:MM:SS TIMESTAMP[(M)] 1970-01-01 00:00:00 do Typ przydatny przy roku 2037 transakcjach YEAR[(2 4)] 70-69(czyli 1970-2069) Rok w formie 2 lub 4 lub 1901-2155 cyfrow. (inny zakres)
Format wyświetlania typu TIMESTAMP Typ Format wyświetlania TIMESTAMP RRRRMMDDGGMMSS TIMESTAMP(14) RRRRMMDDGGMMSS TIMESTAMP(12) RRMMDDGGMMSS TIMESTAMP(10) RRMMDDGGMM TIMESTAMP(8) RRRRMMDD TIMESTAMP(6) RRMMDD TIMESTAMP(4) RRMM TIMESTAMP(2) RR Typy łańcuchowe dzielą się na trzy grupy: zwykłe typy łańcuchowe (o stałej i zmiennej długości łańcucha), typy TEXT i BLOB (duŝe teksty i duŝe bloki binarne, np. dźwięki, obrazy) oraz typy SET i ENUM (zawęŝanie zbioru i typ wyliczeniowy). Zwykłe typy łańcuchowe Typ Zakres Opis [NATIONAL] CHAR(M) [BINARY] 1-255 znaków Łańcuch o stałej długości M (1..255). NATIONAL wymusza uŝycie domyślnego zbioru znaków w standardzie ANSI MySQL; BINARY wyłącza rozpoznawanie wielkości liter CHAR 1 Synonim CHAR(1) [NATIONAL] VARCHAR(M) [BINARY] 1-255 znaków Łańcuch znaków o róŝnej długości, reszta jak wyŝej
Typy TEST i BLOB Typ Długość (znaki ) Opis TINYBLOB 255 Mały obiekt BLOB TINYTEXT 255 Krótkie pole tekstowe BLOB 65535 Zwykły obiekt BLOB TEXT 65535 Pole tekstowe o zwykłej długości MEDIUMBLOB 16777215 Średni obiekt BLOB MEDIUMTEXT 16777215 Pole tekstowe o średniej długości LONGBLOB 4294967295 DuŜy obiekt BLOB LONGTEXT 4294967295 Długie pole tekstowe Typy SET i ENUM Typ Max. ilość wartości w zbiorze ENUM( wartosc1, wartosc 2,..) 65535 SET( wartosc1, wartosc 2,..) 64 Opis W kolumnie tego typu moŝe znajdować się tylko jedna wartość ze zbioru wartości dopuszczalnych lub NULL W kolumnie tego typu moŝe znajdować się podzbiór wartości dopuszczalnych lub NULL
Praca z bazą danych Polecenia SHOW i DESCRIBE pozwalają na sprawdzenie, jakie tabele wchodzą w skład bazy, jakie bazy danych mamy do dyspozycji oraz wyświetlają szczegółowe informacje na temat konkretnej bazy. Przykłady: mysql> show tables; +------------------------+ Tables_in_ksiazki +------------------------+ klienci ksiazki pozycje_zamowione recenzje_ksiazek zamowienia +-----------------------------+ 5 rows in set (0.00 sec) mysql> show databases; +--------------+ Database +--------------+ ksiazki witryny +----------+ 2 rows in set (0.01 sec)
mysql> describe ksiazki; +-------+------------+------+-----+---------+-------+ Field Type Null Key Default Extra +-------+------------+------+-----+---------+-------+ isbn char(13) PRI autor char(30) YES NULL tytul char(60) YES NULL cena float(4,2) YES NULL +-------+--------------+--------+-----+----------+-----+ 4 rows in set (0.00 sec) Stosowane dotychczas polecenia opierają się o język SQL. SQL (ang. Structured Query Language) to strukturalny język zapytań. Jest to najbardziej rozpowszechniony standaryzowany język dostępu do systemów zarządzania relacyjnymi bazami danych (RDBMS). SQL słuŝy do zapisywania i pozyskiwania danych do i z bazy. Język ten rozpoznawalny jest przez niemal wszystkie systemy baz danych, m.in. MySQL, Oracle, PostgreSQL, Sybase, Microsoft SQL Server. Podstawowym standardem języka SQL jest ANSI, obsługiwany przez mysql. Wszelkie róŝnice w standardach SQL moŝna znaleźć na stronie internetowej: http://www.mysql.com/doc/en/compatilibity.html
Zapisywanie danych do bazy Przed przystąpieniem do pracy z bazą naleŝy zapisać do niej jakieś dane. Dokonuje się tego najczęściej za pomocą polecenia SQL INSERT, które umoŝliwia zapisanie do bazy wiersza danych: INSERT [INTO] nazwa_tabeli [(kolumna1, kolumna2,..)] VALUES (wartosc1, wartosc2,..) Na przykład w celu wstawienia nowego rekordu do bazy danych księgarni KsiąŜkorama naleŝy wpisać: INSERT into klienci VALUES (NULL, Julia Kowalska, Wierzbowa 25, Warszawa ); Czasem wystarczy wypełnić danymi tylko niektóre kolumny, nawet w róŝnej kolejność, zwłaszcza gdy brakuje danych do zapełnienia całego rekordu: INSERT into klienci (nazwisko, adres, miejscowosc) VALUES ( Maria Jankowska, Kolejowa 15, Katowice ); lub INSERT into klienci set nazwisko= Maria Jankowska, adres= Kolejowa 15, miejscowosc= Katowice ;
Wyszukiwanie danych w bazie Poleceniem (chyba najwaŝniejszym) słuŝącym do wyszukiwania bazie danych tych wierszy z tabel, które spełniają określone kryteria jest polecenie SELECT o składni: SELECT pozycje FROM nazwy_tabel [WHERE warunek] [GROUP BY rodzaj_grupowania] [HAVING wartosc_funkcji] [ORDER BY porzadek_sortowania] [LIMIT limit] Wykonanie poniŝszego polecenia spowoduje wyświetlenie zawartości kolumn nazwisko, miejscowosc w tabeli klienci: mysql> select nazwisko, miejscowosc from klienci; +-----------------+-------------+ nazwisko miejscowosc +-----------------+-------------+ Julia Kowalska Warszawa Adam Pawlak Szczecin Michalina Nowak Gliwice +-----------------+-------------+ 3 rows in set (0.00 sec)
Aby wyszukać wartości wszystkich pól wszystkich rekordów przechowywanych w tabeli Pozycje_zamowione: mysql> select * from pozycje_zamowione; +--------------+---------------+-------+ zamowienieid isbn ilosc +--------------+---------------+-------+ 1 0-672-31697-8 2 2 0-672-31769-9 1 3 0-672-31769-9 1 3 0-672-31509-2 1 4 0-672-31745-1 3 +--------------+---------------+-------+ 5 rows in set (0.00 sec) Wyszukiwanie danych w bazie W celu ograniczenia liczby wyświetlanych wierszy naleŝy określić kryteria wyszukiwania. Dokonuje się tego za pomocą opcji WHERE o składni: mysql> select * from zamowienia where klientid=3; +-------------------+----------+-----------+-----------+ zamowienieid klientid wartosc data +-------------------+----------+-----------+-----------+ 1 3 69.98 2000-04-02 4 3 6.99 2000-05-01 +-----------+---------+----------+----------------+ 2 rows in set (0.00 sec)
MySQL Szeregowanie danych w określonym porządku W celu uszeregowania wyszukiwanych wierszy w określonym porządku naleŝy opcji ORDER BY polecenia SELECT: mysql> select nazwisko, adres from klienci order by nazwisko; +-----------------+---------------+ nazwisko adres +-----------------+---------------+ Adam Pawlak Szeroka 1/47 Julia Kowalska Wierzbowa 25 Michalina Nowak Zachodnia 357 +-----------------+---------------+ 3 rows in set (0.00 sec) Grupowanie i agregowanie danych Przykładem agregacji niech będzie wyznaczenie średniej wartości złoŝonych zamówień AVG: mysql> select avg(wartosc) from zamowienia; +--------------+ avg(wartosc) +--------------+ 40.990001 +--------------+ 1 row in set (0.00 sec)
Przykładem grupowania niech będzie zapytanie SQL wyznaczające wartość średnią zamówień złoŝonych przez kaŝdego klienta GROUP BY: mysql> select klientid, avg(wartosc) from zamowienia group by klientid; +----------+--------------+ klientid avg(wartosc) +----------+--------------+ 1 12.990000 2 74.000000 3 38.485002 +----------+--------------+ 3 rows in set (0.00 sec) Przytoczone zapytanie moŝna rozszerzyć tak, aby wyszukać klientów, który złoŝyli zamówienia o przeciętnej wartości co najmniej 50 złotych: mysql> select klientid, avg(wartosc) from zamowienia group by klientid having avg(wartosc)>50; +----------+--------------+ klientid avg(wartosc) +----------+--------------+ 2 74.000000 +----------+--------------+ 1 row in set (0.00 sec)
Wskazanie wierszy, które mają być wyświetlone Polecenie SELECT posiada opcję LIMIT, słuŝącą do określenia, które wiersze z tabeli mają być wyświetlone, podając numer wiersza oraz liczbę wierszy, które mają być wyświetlone: mysql> select nazwisko from klienci limit 2,3; Dokonywanie zmian rekordów w bazie danych Oprócz wyszukiwania danych w bazie często istniej potrzeba ich zmiany. W taki celu naleŝy posłuŝyć się poleceniem UPDATE o składni: UPDATE nazwa_tabeli SET kolumna1=wyrazenie1, kolumna2=wyrazenie2,.. [WHERE warunek] [LIMIT limit] Przykład. W celu podniesienia cen wszystkich ksiąŝek o 10% naleŝy uŝyć polecenia UPDATE bez opcji WHERE: mysql> update ksiazki set cena=cena*1.1;
Przykład. W przypadku zmiany tylko jednego wiersza, np. naleŝy uaktualnić adres klienta, naleŝy wpisać: mysql> update klienci set adres= Olkuska 230 where klientid=4; Usuwanie rekordów z baz danych Usuwanie danych z bazy jest bardzo proste. Słuzy temu polecenie DELETE o składni: DELETE FROM nazwa_tabeli [WHERE warunek] [LIMIT limit] Aby usunąć wszystkie wiersze z tabeli naleŝy wpisać: mysql> DELETE FROM nazwa_tabeli; Aby usunąć określony wiersz z tabeli naleŝy wpisać: mysql> delete from klienci where klientid=5; Opcja LIMIT określa maksymalną liczbę wierszy, które mogą być usunięte.
Usuwanie tabel z baz danych W celu usunięcia tabeli z bazy danych naleŝy uŝyć polecenia DROP TABLE o składni: DROP TABLE nazwa_tabeli; Usuwanie baz danych W celu bazy danych naleŝy uŝyć polecenia DROP DATABASE o składni: DROP DTATBASE nazwa_bazy; Wykład zrealizowany w oparciu o literaturę: Luke Welling, Laura Thomson PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty. Wydawnictwo HELION 2003