Bazy danych Baza danych, to miejsce przechowywania danych. Dane w bazie danych są podzielone na tabele. Tabele składają się ze ściśle określonych pól i rekordów. Każde pole w rekordzie ma ściśle ustalony typ przechowywania danych oraz długość przechowywanego ciągu. Baza danych ma swój silnik, dzięki któremu potrafi wyszukiwać i sortować rekordy. Najpopularniejszym rodzajem baz wykorzystywanym w sieci Internet jest baza MySQL. Dla większości płatnych serwerów jest ona w standardzie lub wymaga drobnej dopłaty. Polecenia SQL Instrukcje SQL potrzebne do utworzenia tabel można wpisać z konsoli klienta mysql lub wykonać za pomocą narzędzia do zarządzania bazami danych w graficzny interfejs użytkownika np. phpmyadmin. W grupie Utwórz nowa tabelę w bazie danych w pole Nazwa wpisujemy nazwę tabeli. W pole obok wpisujemy liczbę, która określi z ilu pól tabela będzie się składała. Po wybraniu przycisku Wykonaj przejdziemy do formularza z polami dla każdej z kolumn tabeli. Tworzenie tabeli: W pole tekstowe Pole wpisujemy nazwę kolumny. Dla typu varchar w pole Długość wpisujemy maksymalną liczbą znaków przeznaczoną na przechowywanie łańcucha znakowego. Z listy rozwijalnej Metoda porównywania napisów wybieramy utf8_polish_ci. To samo kodowanie wybieramy w metodzie porównywania napisów dla tabeli. Operacje utworzenia tabeli zatwierdzamy wybierając przycisk Zachowaj. -1-
Tabele możemy tez tworzyć za pomocą poleceń SQL. Polecenie tworzące tabelą należą do grupy poleceń DDL (ang. Data Definition Language) rozpoczyna się klauzula CREATE TABLE. Po tej klauzuli opcjonalnie stosuje się wyrażenie IF NOT EXISTS, dzięki któremu upewniamy się o braku w bazie danych takiej tabeli, a następnie podaje nazwę tabeli. Po nazwie w nawiasach zwykłych wymieniamy po kolei kolumny, następnie typ danych, jaki ma przechowywać. W przypadku kolumny przechowującej łańcuch znakowy opcjonalnie można ustawić kodowanie znaków oraz metodę porównywania napisów. Poza nawiasami również można ustawić kodowanie i metodę porównywania napisów dla całej tabeli. Wyrażenie NOT NULL dodane na końcu każdej z kolumn uniemożliwia wprowadzenie danych do tabeli z pominięciem tej kolumny. CREATE TABLE IF NOT EXISTS `hanka`.`dane01` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `imie` VARCHAR( 15 ) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL, `nazwisko` VARCHAR( 30 ) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL, `email` VARCHAR( 20 ) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL, `tel` VARCHAR( 15 ) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL, `adres` VARCHAR( 20 ) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_polish_ci Polecenie SQL wpisujemy w pole tekstowe zakładki SQL wybranej z paska menu. Po zatwierdzeniu operacji przyciskiem Wykonaj otrzymamy informacje o utworzeniu nowej tabeli, a w lewym panelu pojawi się nazwa nowej tabeli. Dodawanie pola Alter TABLE dane01 ADD email VARCHAR(100)DEFAULT brak ; Zmiana parametrów pola ALTER TABLE dane01 MODIFY email VARCHAR(80); Zmiana nazwy pola ALTER TABLE dane01 CHANGE email email VARCHAR(80) DEFAULT brak ; Usuwanie pola ALTER TABLE dane01 DROP adres; Zmiana nazwy tabeli ALTER TABLE dane01 RENAME dane_pracowników; Usuwanie tabeli ALTER TABLE dane01 RENAME dane_pracowników; Ograniczenia W bazie danych podczas tworzenie tabeli (CREATE TABLE) lub modyfikacji jej struktury (ALTER TABLE) można nadać jej ograniczenia (CONSTRAINTS). Typy ograniczeń: Not null Unique Primary key Foreign key -2-
Uwaga. Nie we wszystkich bazach danych można używać kluczy obcych. W mysql można, ale tylko jeśli używa się tabel typu InnoDB. W mysql typ InnoDB można wybrać podczas tworzenia tabel z menu rozwijalnego o nazwie Mechanizm składowania. W przypadku typu MyISAM da się utworzyć klucz obcy, ale będzie on ignorowany. Dodawanie rekordów - INSERT INTO Polecenie SQL wstawiające dane do tabeli rozpoczyna się klauzulą INSET INTO, po której podajemy nazwę tabeli. Za nazwą tabeli w nawiasach zwykłych wymieniamy kolumny, do których będą wprowadzane wartości. Po nawiasach umieszczamy klauzulę VALUES, a za nią w nawiasach zwykłych wartości odpowiadające wcześniej wymienionym kolumnom. Wymienione kolumny mogą występować w dowolnej kolejności, ważne, aby podane wartości im odpowiadały. Podczas wstawiania danych do tabeli możemy używać polecenia INSERT INTO bez wymieniania nazw kolumn, jeśli umieszczamy po kolei dane w każdej kolumnie. INSERT INTO dane01 VALUES ('0', 'jan', 'kowalski', 'jan@jan.eu', '893554556', 'szeroka 2'); Importowanie danych LOAD DATA Jeśli posiadamy już dane np. w arkuszu kalkulacyjnym, to możemy je zaimportować do bazy danych. Aby to wykonać plik arkusza kalkulacyjnego zapisujemy z rozszerzeniem.cvs z wybranym kodowaniem znaków utf-8. W panelu phpmyadmin uaktywniamy tabele i wybieramy z paska menu Import. W oknie w polu Lokalizacja pliku tekstowego za pomocą przycisku Przeglądaj wybieramy plik.cvs. Zatwierdzamy przyciskiem Otwórz. W sekcji Format importowanych plików zaznaczamy opcję CVS przy użyciu LOAD DATA. Wybór zatwierdzamy przyciskiem Wykonaj. W wyniku tego działania otrzymamy informację o wykonanym imporcie danych. Polecenie SQL służące do zaimportowania danych do tabeli jest następujące: -3-
LOAD DATA LOCAL INFILE 'j:\\dane.cvs' INTO TABLE dane01 FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n' Polecenie załadowania danych rozpoczyna klauzula LOAD DATA INFILE, po której w apostrofach podjemy ścieżkę dostępu do pliku. Opcjonalnie przed słowem INFILE można użyć słowa LOCAL wskazującego na pobieranie pliku z komputera klienta. Po nazwie pliku stosuje się klauzulę INTO TABLE, a za nią umieszczana jest nazwa tabeli, do której zostaną zaimportowane dane z podanego pliku. Opcjonalnie można stosować klauzulę FIELDS TERMINATED BY, za którą podaje się znak rozdzielający poszczególne pola w rekordzie. W przypadku plików.cvs jest to znak średnika (podany w apostrofach). Opcjonalnie można również stosować klauzulę LINES TERMINATED BY, za którą podajemy znak symbolizujący koniec rekordu w pliku (podany w apostrofach). Modyfikacja rekordów - UPDATE UPDATE dane01 SET email= kowal@nowastrona.pl WHERE imie= jan ; Pobieranie danych z bazy SELECT Wybieranie rekordów z bazy danych stosuje się poprzez polecenie SELECT. Po nim jest wymieniana lista kolumn oddzielonych od siebie znakiem przecinka, z których pobieramy dane. Po nazwach kolumn stosujemy wyrażenie FROM, po którym podajemy nazwę tabeli. SELECT imie, nazwisko FROM `dane01`; SELECT * FROM `dane01`; - wyświetla wszystkie dane z tabeli. SELECT ALL * FROM `dane01`; - wyświetla wszystkie dane z tabeli, nawet powtarzające się. SELECT DISTINCT * FROM `dane01`;- wyświetla wszystkie dane z tabeli, z pominięciem powtarzające się. Powtarzający się wiersz zostanie wyświetlony tylko raz. Za pomocą interfejsu graficznego phpmyadmin pobieranie wszystkich danych wykonujemy za pomocą zakładki Przeglądaj, natomiast wyszukiwanie rekordów za pomocą zakładki Szukaj z paska menu. W celu ograniczenia liczby zwracanych rekordów stosujemy klauzulę LIMIT na końcu zapytania, po niej podawana jest maksymalna liczba wierszy, jaka może być zwrócona. Po klauzuli LIMIT mogą występować także dwie liczby oddzielone przecinkami. Wówczas pierwsza oznacza numer wiersza, po którym będą zwracane rekordy wynikowe, a druga oznacza maksymalną liczbę wierszy do wyświetlenia: -4-
SELECT * FROM `dane01` LIMIT 5; - wyświetlenie pięciu rekordów SELECT * FROM `dane01` LIMIT 3, 2; - wyświetlenie dwóch rekordów, począwszy od trzeciego W celu uporządkowania wybranych rekordów służy klauzula ORDER BY, po której podajemy kolumny według której nastąpi sortowanie danych. Klauzule te stosujemy przed klauzulą LIMIT: SELECT * FROM `dane01` ORDER BY nazwisko ASC LIMIT 3, 2; ASC- sortowanie rosnące wg alfabetu, DESC sortowanie malejące wg alfabetu W celu ograniczenia liczby zwracanych rekordów spełniających warunek należy przed klauzulą sortująca podać klauzulę WHERE, a po niej podać warunek wykorzystujący operatory porównań: SELECT * FROM `dane01` WHERE imie = 'ewa'; SELECT * FROM `dane01` WHERE (id>1 AND id<=2) OR (Imie='ewa'); Warunek możemy stosować też do kolumn przechowujących łańcuchy znakowe. Służy do tego wyrażenie WHERE uzupełnione o słowo LIKE. Aby wybrać z tabeli dane01 imie złożone z trzech liter, stosujemy wyrażenie LIKE, po którym podajemy w apostrofach trzy znaki podkreślenia. Jedno podkreślenie oznacza dowolny znak. SELECT * FROM `dane01` WHERE imie LIKE ' '; Wyrażenie LIKE może zawierać znak %, oznaczający dowolną liczbę znaków lub żaden znak. Zastosowanie po znaku % konkretnego ciągu znaków spowoduje porównanie do łańcuchów znakowych kończących się na konkretny ciąg znaków. SELECT * FROM `dane01` WHERE email LIKE %net.eu; Usuwanie rekordów Usuwanie danych odbywa się za pomocą polecenia DELETE. Aby usunąć wszystkie dane z tabeli należy użyć polecenia: DELETE FROM `dane01`; DELETE FROM `dane01`where id=4; Eksportowanie danych oraz całej bazy danych Eksport danych pozwala na szybkie umieszczenie danych zawartych w bazie danych, w pliku o wybranym podczas eksportu formacie np.:.xml,.xls. w tym celu w sekcji Eksport zaznaczamy typ pliku, do którego chcemy wyeksportować dane. Po zatwierdzeniu operacji przyciskiem Wykonaj, pojawi się okno systemu z pytaniem gdzie chcemy zapisać plik. Jeżeli natomiast wykonamy eksport do pliku.xml, zobaczymy wartości rekordów umieszczane w znacznikach. -5-
Aby pobrać polecenia SQL niezbędne do odtworzenia struktury całej bazy danych lub kilku baz danych wraz z ich zawartościami, należy bez zaznaczania w lewym panelu bazy danych przejść w pasku menu do zakładki Eksport, a następnie w sekcji eksport zaznaczyć interesującą bazę danych lub tabelę oraz zaznaczyć opcje SQL. Zatwierdzenie operacji przyciskiem wykonaj spowoduje wyświetlenie pliku wraz z poleceniami SQL. Funkcje bazodanowe Funkcje agregujące Funkcje matematyczne Data i czas Formatowanie łańcuchów znakowych -6-