Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych Autor artykułu: mgr Jerzy Wałaszek |
©2015 mgr
Jerzy Wałaszek
|
Baza danych (ang. data base) jest strukturą przechowującą różnego rodzaju dane. Język SQL (ang. Structured Query Language – Strukturalny Język Zapytań) jest językiem, który służy do obsługi bazy danych. W bazie danych informacje przechowywane są w tabelach. Tabele składają się z wierszy i kolumn. Wiersze będziemy nazywali rekordami, a kolumny polami. Przykładowa tabela wygląda następująco:
Tabela składa się z trzech wierszy i trzech kolumn. Poszczególne kolumny posiadają nazwy: Nazwisko, Imię oraz Wiek. Każdy rekord (wiersz) tej tabeli przechowuje trzy informacje w kolejnych kolumnach. Zwróć jednak uwagę, że taki sposób przechowywania informacji nie jest najlepszy. Wyobraźmy sobie, że w tabeli mamy dwie osoby o tym samym nazwisku, imieniu i wieku:
Oczywiście są to dwie różne osoby. Jak je rozróżnić? Rozwiązaniem jest dodanie do tabeli dodatkowej kolumny, zawierającej dane, które dla każdego rekordu są inne (unikalne). Mogą być to np. kolejne numery:
Teraz naszych Kowalskich już nie pomylimy, ponieważ jeden posiada OsobaId = 4, a drugi OsobaId = 5. Taką dodatkową kolumnę służącą do jednoznacznej identyfikacji rekordu tabeli nazywamy kluczem głównym lub podstawowym (ang. primary key). Tabele w bazie danych są zwykle powiązane ze sobą różnymi zależnościami. Zależności te nazywamy relacjami. Wyobraź sobie, że pewna baza danych wiąże ze sobą pacjentów szpitala z zabiegami, które mają być u nich wykonane. Wszystko można by umieścić w jednej tabeli:
Na pierwszy rzut oka wygląda dobrze. Ale... który Kowalski Jan ma rentgena i morfologię? Czy jest to ta sama osoba? A jeśli ktoś popełni pomyłkę przy wprowadzaniu nazwy zabiegu, jak w rekordzie 4 i 5 w kolumnie Zabieg? Podstawową przesłanką tworzenia relacji w bazie danych są powtarzające się dane. W tym prostym przypadku takimi powtarzającymi się danymi są pacjenci oraz zabiegi. Aby rozwiązać ten problem, utworzymy trzy tabele: jedną dla pacjentów, drugą dla zabiegów, a trzecią, która łączy ze sobą pacjentów i zabiegi. Całość wygląda tak:
W trzeciej tabeli umieszczamy odwołania do kolumn PacjentId z pierwszej tabeli oraz ZabiegId z drugiej tabeli. Zwróć uwagę, że teraz jednoznacznie wskazaliśmy na pacjenta Kowalski Jan. Również nie ma możliwości pomylenia nazwy zabiegu, ponieważ w trzeciej tabeli wpisujemy tylko jego numer z tabeli drugiej. Utworzyliśmy tzw. relację wiele do wielu (wielu pacjentów może mieć ten sam zabieg oraz wiele zabiegów może dotyczyć tego samego pacjenta). Dokładniej o relacjach pomówimy na dalszych lekcjach.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Typy danych w SQLAby utworzyć tabele, musisz znać podstawowe typy danych, które obowiązują w języku SQL. Typy te będą definiować, co można przechowywać w kolumnach tabeli. Dzielą się ona na trzy kategorie: Typy liczbowe
Typy daty i czasu
Typy łańcuchowe
W MySQL występuje więcej typów danych, lecz na początek tyle nam wystarczy.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Praca z MySQLAby pracować z bazą MySQL, należy się do niej zalogować. Uruchom terminal (Ctrl+Alt+T). Od nauczyciela otrzymasz nazwę konta w systemie MySQL, hasło dostępu do tego konta i nazwę swojej bazy danych. Na przykład:
W terminalu wpisz polecenie:
Jeśli wszystko wykonasz poprawnie, otrzymasz zgłoszenie systemu MySQL:
Welcome to the MySQL monitor. Commands end with
; or \g.
Praca w systemie MySQL polega na wpisywaniu tzw. zapytań do bazy danych. W odpowiedzi baza danych wykonuje odpowiednie polecenie i zwraca wyniki. Każde zapytanie kończymy w terminalu znakiem średnika. Na początek utworzymy tabelę do przechowywania danych. Przy tworzeniu tabel stosujemy następujące zapytanie SQL:
CREATE TABLE nazwa_tabeli
Słowa kluczowe SQL proponuję pisać dużymi literami, aby odróżniały się od parametrów i danych. W nazwach tabel i kolumn stosuj tylko małe litery łacińskie (bez polskich znaków) oraz cyfry. Atrybuty kolumn udostępniają różne opcje dla kolumny. Poznamy je za chwilę. W wierszu poleceń wpisz:
CREATE TABLE osoba (nazwisko VARCHAR(20), imie
VARCHAR(20), wiek INT);
Wpisywanie dłuższych poleceń możesz rozbić na kilka wierszy, lecz ostatni musi być zakończony średnikiem:
CREATE TABLE osoba
Utworzona tabela jest pusta. Musimy zatem wprowadzić do niej dane. Do wprowadzania danych służy polecenie INSERT o ogólnej postaci:
INSERT INTO tabela (kolumna1, kolumna2, ...,
kolumnan) VALUES (wartość_1, wartość_2, ..., wartość_n);
Jeśli dane będą podawane w kolejności zdefiniowanych w tabeli kolumn, to polecenie przyjmuje prostszą postać:
INSERT INTO tabela VALUES (wartość_1,
wartość_2, ..., wartość_n);
Wpisz w wierszu poleceń (nie musisz za każdym razem wpisywać wszystkiego od początku – naciśnij klawisz strzałka w górę, aby przywołać ostatnio wydane polecenie i zmień w nim dane, po czym wciśnij klawisz Enter):
INSERT INTO osoba (nazwisko, imie, wiek) VALUES
('Musiał', 'Józef', 46);
Zawartość tabeli wyświetlamy za pomocą polecenia SELECT. Aby zobaczyć całą tabelę, wpisz:
SELECT * FROM osoba;
W wyniku otrzymasz zawartość całej tabeli osoba:
+--------------+-----------+------+ | nazwisko | imie | wiek | +--------------+-----------+------+ | Musiał | Józef | 46 | | Olgiewicz | Karol | 58 | | Andrusiewicz | Magdalena | 35 | +--------------+-----------+------+ 3 rows in set (0.00 sec)
Jeśli nie interesują nas wszystkie kolumny tabeli, to stosujemy następujące polecenie SELECT:
SELECT kolumna_1, kolumna_2, ..., kolumna_n
FROM tabela;
Dla przykładu wyświetlmy wiek oraz nazwisko (w takiej właśnie kolejności):
mysql> SELECT wiek, nazwisko FROM osoba; +------+--------------+ | wiek | nazwisko | +------+--------------+ | 46 | Musiał | | 58 | Olgiewicz | | 35 | Andrusiewicz | +------+--------------+ 3 rows in set (0.00 sec)
Dodamy teraz do naszej tabeli dwóch Kowalskich:
INSERT INTO osoba VALUES ('Kowalski','Jan',27); Wyświetl zawartość tabeli:
mysql> SELECT * FROM osoba; +--------------+-----------+------+ | nazwisko | imie | wiek | +--------------+-----------+------+ | Musiał | Józef | 46 | | Olgiewicz | Karol | 58 | | Andrusiewicz | Magdalena | 35 | | Kowalski | Jan | 27 | | Kowalski | Jan | 27 | +--------------+-----------+------+ 5 rows in set (0.00 sec)
Dwa ostatnie rekordy są identyczne i nie będzie je można rozróżniać. Usuń tabelę osoba za pomocą polecenia:
DROP TABLE osoba;
Tabelę utworzymy ponownie, dodając kolumnę klucza podstawowego. Kolumna będzie zawierała liczby. Wpisz:
CREATE TABLE osoba (osoba_id INT PRIMARY KEY,
nazwisko VARCHAR(20), imie VARCHAR(20), wiek INT);
Następnie wprowadź do tabeli dane:
INSERT INTO osoba VALUES (1, 'Żak', 'Anna',
43);
Wyświetl zawartość tabeli:
mysql> SELECT * FROM osoba; +----------+----------+------+------+ | osoba_id | nazwisko | imie | wiek | +----------+----------+------+------+ | 1 | Żak | Anna | 43 | | 2 | Kowalski | Jan | 29 | | 3 | Kowalski | Jan | 29 | +----------+----------+------+------+ 3 rows in set (0.00 sec)
Teraz każdy z Kowalskich posiada swój numer identyfikacyjny, zatem go nie pomylimy. Ale co się stanie, jeśli dopiszemy do tabeli osobę o kluczu, który już jest w tabeli. Wpisz:
mysql> INSERT INTO osoba VALUES (3, 'Magdoń', 'Rozalia', 45); ERROR 1062 (23000): Duplicate entry '3' for key 'PRIMARY'
Powstanie błąd, ponieważ w tabeli już jest rekord o kluczu podstawowym 3. Klucze muszą być unikalne, czyli nie mogą się powtarzać (inaczej po co je stosować?). Wprowadzanie kolejnych numerów można zautomatyzować, jeśli dodamy do kolumny oboba_id atrybut AUTO_INCREMENT (automatyczne zwiększanie o 1). Powoduje on, że każdy nowy rekord otrzyma numer identyfikacyjny o 1 większy od największego numeru w tabeli. Wpisz:
ALTER TABLE osoba MODIFY COLUMN osoba_id INT
AUTO_INCREMENT;
Ponieważ modyfikujemy kolumnę, za jej nazwą należy umieścić typ oraz atrybut. Teraz kolejne rekordy dodajemy następująco:
INSERT INTO osoba VALUES (0,'Magdoń', 'Rozalia', 45); INSERT INTO osoba VALUES (0,'Kawa', 'Aleksander', 33);
Wyświetl zawartość tabeli.
mysql> SELECT * FROM osoba; +----------+----------+------------+------+ | osoba_id | nazwisko | imie | wiek | +----------+----------+------------+------+ | 1 | Żak | Anna | 43 | | 2 | Kowalski | Jan | 29 | | 3 | Kowalski | Jan | 29 | | 4 | Magdoń | Rozalia | 45 | | 5 | Kawa | Aleksander | 33 | +----------+----------+------------+------+ 5 rows in set (0.00 sec)
Zwróć uwagę, że dwa ostatnie rekordy otrzymały swoje numery identyfikacyjne, chociaż w danych wejściowych podaliśmy w tym miejscu 0. Usuń tabelę osoba.
DROP TABLE osoba;
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ćwiczenie
Wprowadź do bazy danych następującą tabelę (pole p_id
ma być polem klucza podstawowego z automatycznym zwiększaniem
zawartości):
Uwaga: daty wprowadzamy w apostrofach w postaci: rrrr-mm-dd, np: '1998-10-01'. Inaczej do bazy zostanie wstawiona data 0000-00-00.
Wyświetl następujące dane:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Podsumowanie poznanych poleceń SQLTworzenie tabeli:CREATE TABLE nazwa_tabeli
Wprowadzanie danych:INSERT INTO tabela (kolumna_1, kolumna_2, ..., kolumna_n) VALUES
(wartość_1, wartość_2, ..., wartość_n);
Pobieranie danych z tabeli:SELECT * FROM tabela;
Usuwanie tabeli:DROP TABLE tabela;
Zmiana atrybutu AUTO_INCREMENT dla kolumny:ALTER TABLE tabela MODIFY COLUMN kolumna typ
AUTO_INCREMENT;
|
I Liceum Ogólnokształcące |
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe