MySQL Kamil Tomaszewski Czym jest MySQL? MySQL to jeden z najpopularniejszych, darmowych silników relacyjnych baz danych. MySQL tworzony jest przez pojedynczy podmiot - szwedzką firmę MySQL AB. [wikipedia.pl] Konkurencyjne rozwiązania PostgreSQL Microsoft SQL Server Firebird Oracle Początkowo opracowywany na Uniwersytecie Kalifornijskim Berkeley i opublikowany pod nazwą Postgres. W miarę rozwoju i zwiększania funkcjonalności, baza danych otrzymała nazwy Postgres95 i ostatecznie PostgreSQL, aby upamiętnić pierwowzór oraz zaznaczyć zgodność ze standardem SQL. komercyjny system zarządzania bazą danych, wspierany i rozpowszechniany przez korporację Microsoft. Jeden z trzech produktów bazodanowych firmy Microsoft, obok Access oraz ADP. MS SQL Server jest platformą bazodanową typu klient-serwer. W stosunku do programu Access odznacza się lepszą wydajnością, niezawodnością i skalowalnością. Przede wszystkim są tu zaimplementowane wszelkie mechanizmy wpływające na bezpieczeństwo operacji (m.in. wyzwalacze i transakcje). całkowicie darmowy serwer relacyjnych baz danych zgodny ze standardem ANSI SQL-92, oferujący również wiele elementów standardu SQL-99 oraz SQL:2003, działający w środowisku systemu operacyjnego Linux, Windows i wielu innych. Może być używany bez rejestrowania lub wnoszenia jakichkolwiek opłat w dowolnych zastosowaniach, również komercyjnych. Relacyjna baza danych Oracle posługuje się standardowym językiem zapytań SQL oraz posiada wbudowane wewnętrzny język tworzenia procedur składowanych PL/SQL - będący proceduralnie obudowanym językiem SQL. Jako języka tworzenia procedur składowanych w bazach danych Oracle (od wersji 8i) można używać również języka Java Zasady licencjonowania MySQL jest dostępny na licencji GPL, jednakże można nabyć również wersje z licencjami zamkniętymi. Oznacza to, że MySQL jest w pełni darmowy, jednak za wsparcie techniczne i pomoc trzeba już zapłacić. Istnieje jednak w internecie wiele darmowych manuali. Co to jest RDBMS? Relational DataBase Managament System (RDBMS, dosłownie system zarządzania relacyjną bazą danych) to zestaw programów służących do korzystania z bazy danych opartej na modelu relacyjnym. Większość wewnętrznych języków RDBMS jest w pewnym stopniu zgodna ze standardem języka zapytań SQL. Język ten doczekał się już dwóch standardów SQL92 i SQL99, jednak różnice pomiędzy teoretycznie SQL-owymi systemami są zbyt duże, żeby możliwe było przeniesienie nawet relatywnie prostej aplikacji z jednego systemu na drugi. RDBMS a pliki jednorodne Problemy związane ze stosowaniem plików jednorodnych: • Praca z dużym plikiem może być powolna. • Poszukiwanie konkretnego rekordu lub grupy rekordów w pliku jest trudne. • Problemy sprawia dostęp jednoczesny. • Aby wykonać jakieś operacje na danych konieczne jest wczytanie i przechowywanie w pamięci całego pliku. Przy dużych plikach może to sprawiać problemy. • Nie istnieje żadna prosta metoda tworzenia różnych poziomów dostępu do danych. RDBMS a pliki jednorodne Jak RDBMS rozwiązują te problemy? • Pozwalają na szybszy dostęp do danych niż pliki jednorodne. • Można zadawać zapytania o dane spełniające konkretne kryteria. • Posiadają wbudowany mechanizm zapewniania równoległego dostępu, który pozostaje poza kręgiem programisty. • Pozwalają na swobodny dostęp do danych. • Mają wbudowany system przywilejów. Koncepcje relacyjnych baz danych Relacyjne bazy danych są obecnie najczęściej wykorzystywanym typem baz danych. Opierają się one na teoretycznych podstawach algebry relacyjnej. Relacyjne bazy danych składają się z relacji, zwanych zazwyczaj tabelami. Tabela jest dokładnie tym co oznacza – tabelą danych. Koncepcje relacyjnych baz danych KLIENCI Nazwisko Adres Miejscowosc Nowak Anna Wierzbowa 25 Warszawa Kowalski Adam Szeroka 1/47 Oborniki Pawlak Julia Zachodnia 357 Gliwice Koncepcje relacyjnych baz danych Nazwa tabeli KLIENCI Nazwisko Adres Miejscowosc Nowak Anna Wierzbowa 25 Warszawa Kowalski Adam Szeroka 1/47 Oborniki Pawlak Julia Zachodnia 357 Gliwice Koncepcje relacyjnych baz danych Każda kolumna tabeli posiada wyróżniającą ją nazwę i zawiera inny rodzaj danych. KLIENCI Każdej kolumnie przypisany jest typ danych. Kolumny Nazwisko, Adres i Miejscowosc zawierają ciągi znaków – są typu string. Nazwisko Adres Miejscowosc Nowak Anna Wierzbowa 25 Warszawa Kowalski Adam Szeroka 1/47 Oborniki Pawlak Julia Zachodnia 357 Gliwice Koncepcje relacyjnych baz danych Klucze Konieczne jest znalezienie sposobu jednoznacznej identyfikacji każdego klienta. Rozpatrzmy przykład Anny Nowak. KLIENCI Nazwisko Adres Miejscowosc Nowak Anna Wierzbowa 25 Warszawa Kowalski Adam Szeroka 1/47 Oborniki Pawlak Julia Zachodnia 357 Gliwice Jak jednoznacznie stwierdzić, że chodzi o tę właśnie Annę Nowak? Koncepcje relacyjnych baz danych Klucze Konieczne jest znalezienie sposobu jednoznacznej identyfikacji każdego klienta. Rozpatrzmy przykład Anny Nowak. KLIENCI KlientID Nazwisko Adres Miejscowosc 1 Nowak Anna Wierzbowa 25 Warszawa 2 Kowalski Adam Szeroka 1/47 Oborniki 3 Pawlak Julia Zachodnia 357 Gliwice Dodana została kolumna KlientID umożliwiająca jednoznaczne zidentyfikowanie Anny Nowak. Pole identyfikujące poszczególne rekordy nazywane jest kluczem lub kluczem podstawowym. Klucz może składać się z kilku pól – np. Julia Nowak z ulicy Wierzbowej 25 w Warszawie, wtedy klucz składałby się z pól Nazwisko, Adres i Miejscowosc, co jednak nie gwarantowałoby unikalności. Koncepcje relacyjnych baz danych KLIENCI KlientID Nazwisko Adres Miejscowosc 1 Nowak Anna Wierzbowa 25 Warszawa 2 Kowalski Adam Szeroka 1/47 Oborniki 3 Pawlak Julia Zachodnia 357 Gliwice RELACJA: Każde zamówienie w tabeli Zamowienia zawiera odwołanie do klienta z tabeli Klienci ZAMOWIENIA ZamowienieID KlientID Wartosc Data 1 3 27.50 25.11.2005 2 1 12.99 31.09.2005 3 2 74.00 1.01.2004 Koncepcje relacyjnych baz danych ZamowienieID Wartosc Data KlientID Nazwisko Adres Miejscowosc 13 227.50 29.01.2004 1 Nowak Anna Wierzbowa 25 Warszawa 15 112.99 12.11.2005 1 Nowak Anna Wierzbowa 25 Warszawa 17 174.00 13.12.2005 1 Nowak Anna Wierzbowa 25 Warszawa Koncepcje relacyjnych baz danych ZamowienieID Wartosc Data KlientID Nazwisko Adres Miejscowosc 13 227.50 29.01.2004 1 Nowak Anna Wierzbowa 25 Warszawa 15 112.99 12.11.2005 1 Nowak Anna Wierzbowa 25 Warszawa 17 174.00 13.12.2005 1 Nowak Anna Wierzbowa 25 Warszawa • marnotrawstwo pamięci • niespójność danych SQL SQL (ang. Structured Query Language) to strukturalny język zapytań używany do tworzenia, modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych. Język SQL jest językiem deklaratywnym. Decyzję o sposobie przechowywania i pobrania danych pozostawia się systemowi zarządzania bazą danych DBMS. Jest to język programowania opracowany w latach siedemdziesiątych w firmie IBM. Stał się on standardem w komunikacji z serwerami relacyjnych baz danych. Wiele współczesnych systemów relacyjnych baz danych używa do komunikacji z użytkownikiem SQL, dlatego mówi się, że korzystanie z relacyjnych baz danych, to korzystanie z SQL-a. Pierwszą firmą, która włączyła SQL do swojego produktu komercyjnego, był Oracle. Dalsze wprowadzanie SQL-a, w produktach innych firm, wiązało się nierozłącznie z wprowadzaniem modyfikacji pierwotnego języka. Wkrótce utrzymanie dalszej jednolitości języka wymagało wprowadzenia standardu. SQL Użycie SQL, zgodnie z jego nazwą, polega na zadawaniu zapytań do bazy danych. Zapytania można zaliczyć do jednego z dwóch głównych podzbiorów: SQL DML (ang. Data Manipulation Language, czyli Język Manipulacji Danymi), SQL DDL (ang. Data Definition Language, czyli Język Definicji Danych). Instrukcje SQL w obrębie zapytań tradycyjnie zapisywane są wielkimi literami, jednak nie jest to wymóg. Każde zapytanie w SQL-u musi kończyć się znakiem ";" (średnik). Dodatkowo, niektóre interpretery SQL (np. psql w przypadku PostgreSQL), używają swoich własnych instrukcji, spoza standardu SQL, które służą np. do połączenia się z bazą, wyświetlenia dokumentacji, itp. SQL DML DML służy do operacji na danych - do ich umieszczania w bazie, kasowania, przeglądania, zmiany. Najważniejsze polecenia z tego zbioru to: • • • • SELECT - pobranie z bazy danych, INSERT - umieszczenie danych w bazie, UPDATE - zmiana danych, DELETE - usunięcie danych z bazy. Dane tekstowe podawane muszą być zawsze w formie ograniczonej znakami pojedynczego cudzysłowu ('). SQL PRZYKŁAD SELECT * FROM pracownicy WHERE pensja > 2000 ORDER BY staz DESC; Wyświetla z tabeli pracownicy (FROM pracownicy) wszystkie kolumny (*) dotyczące tych pracowników, których pensja jest większa niż 2000 (WHERE pensja > 2000) i sortuje wynik malejąco według stażu pracy (ORDER BY staz DESC). SQL PRACOWNICY Imię Nazwisko Pensja Staż Jan Kowalski 800 1 Marek Stachowiak 2100 2 Krzysztof Zieliński 5000 3 SELECT * FROM pracownicy SQL PRACOWNICY Imię Nazwisko Pensja Staż Jan Kowalski 800 1 Marek Stachowiak 2100 2 Krzysztof Zieliński 5000 3 SELECT * FROM pracownicy WHERE pensja > 2000 SQL PRACOWNICY Imię Nazwisko Pensja Staż Jan Kowalski 800 1 Marek Stachowiak 2100 2 Krzysztof Zieliński 5000 3 SELECT * FROM pracownicy WHERE pensja > 2000 ORDER BY staz DESC; SQL EFEKT KOŃCOWY PRACOWNICY Krzysztof Zieliński 5000 3 Marek Stachowiak 2100 2 SELECT * FROM pracownicy WHERE pensja > 2000 ORDER BY staz DESC; SQL DDL Dzięki DDL natomiast, można operować na strukturach, w których te dane są przechowywane - czyli np. dodawać, zmieniać i kasować tabele lub bazy. Najważniejsze polecenia tej grupy to: • CREATE (np. CREATE TABLE, CREATE DATABASE, ...) - utworzenie struktury (bazy, tabeli, indeksu, itp.), • DROP (np. DROP TABLE, DROP DATABASE, ...) - całkowite usunięcie struktury, • ALTER (np. ALTER TABLE ADD COLUMN ...) - zmiana struktury (dodanie kolumny do tabeli, zmiana typu danych w kolumnie tabeli). SQL PRZYKŁAD INSERT INTO pracownicy (imie, nazwisko, pensja, staz) VALUES ('Jan', 'Kowalski', 5500, 1); Dodaje do tabeli pracownicy (INTO pracownicy) wiersz (rekord) zawierający dane pojedynczego pracownika. MySQL Zalogowanie się >mysql –h nazwa_komputera –u identyfikator_uzytkownika –p -h – wskazanie komputera, do którego ma nastąpić połączenie. -u – wskazanie identyfikatora użytkownika -p – informuje o logowaniu z użyciem hasła Wskazanie bazy danych, która zostanie wykorzystana >mysql use nazwa_bazy Przykładowy kod SQL tworzący tabelę klienci 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 ); Przydatne linki, literatura Linki: http://www.mysql.com http://webdeveloper.pl/manual_mysql/show.php?str=manual_toc_pl.html http://www.krasnal.tk/ Literatura: PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty. Wydanie trzecie Autorzy: Luke Welling, Laura Thomson