Niniejszy tekst pisałem głównie w oparciu o program mysql. Jeżeli nie masz dostępu do tego programu również powinieneś przeczytać ten tekst do końca, ponieważ opisane polecenia przydadzą Ci się podczas używania np. języka PHP do obsługiwania baz MySQL.
Zaprojektowanie pierwszej tabeli
W kursie programowania zatytułowałbym ten paragraf jako "Pierwszy program" - wyświetla napis "Hello World!". Chodzi tutaj o pewien początek, aby zaznajomić użytkownika z podstawą danego języka programowania (podstawowa struktura programu). Podobnie w MySQL trzeba postawić takie "pierwsze kroki".
Zanim wykonasz instrukcję musisz posiadać bazę danych. Dla przypomnienia bazę danych tworzymy w następujący sposób:
CREATE DATABASE moja_baza;
USE moja_baza;
|
Polecenie CREATE DATABASE powoduje utworzenie nowej bazy danych o nazwie "moja_baza", następnie polecenie USE powoduje wybranie tej bazy danych (od teraz polecenia wykonywane będą w obrębie bazy "moja_baza").
Powyższa instrukcja zadziała w przypadku tekstowego monitora mysqld - mysql. W phpMyAdmin oba powyższe polecenia nie będą Ci potrzebne (większość rzeczy polega na klikaniu w linki). Polecam jednak używać poleceń tekstowych dla samego zapamiętania ich składni (przyda się podczas używania PHP).
Teraz utworzymy prostą tabelę z danymi o pewnych osobach. Wpisujemy:
CREATE TABLE uzytkownicy(
uid MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
imie VARCHAR(30) NOT NULL,
nazwisko VARCHAR(30) NOT NULL,
email VARCHAR(50) NOT NULL,
data_dodania DATETIME NOT NULL,
PRIMARY KEY (uid)
);
|
Powyższy układ można też zapisać w jednej linii - średnik informuje o końcu polecenia.
Za pomocą polecenia CREATE tworzymy tabelę uzytkownicy.
Następnie określamy kolumny i ich rodzaje, czyli np. kolumna "uid" typu MEDIUMINT, bez znaku - UNSIGNED (typ określa liczby z zakresu od -n do n, a w przypadku typu unsigned wartość liczona jest od 0 w górę), NOT NULL (czyli musi mieć jakąś wartość), AUTO_INCREMENT - inkrementuj (zwiększaj o 1) przy dodawaniu nowego rekordu.
Kolejne polecenia są analogiczne: imie o długości 30 znaków, nazwisko o długości 30 znaków, email o długości 50 znaków oraz data dodania (format daty DATETIME, czyli rrrr-mm-dd gg-mm-ss, np. 2006-03-12 15:23:01) - i wszystkie kolumny muszą mieć jakąś wartość (NOT NULL).
PRIMARY KEY określa, która z kolumn jest kluczem głównym (na razie nie będę wyjaśniał do czego służą klucze i indeksy - warto wspomnieć, że pole tego typu powinno mieć unikatową wartość - czyli w przypadku tabeli "uzytkownicy" każdy rekord musi mieć inny "uid" - ID użytkownika).
Na końcu zamykamy nawias i stawiamy średnik. Jeżeli nie wystąpiły żadne błędy powinna pojawić się w bazie nowa tabela o podanych wyżej kolumnach.
Do sprawdzenia tabel znajdujących w konkretnej bazie danych można użyć polecenia:
Do sprawdzenia, jakie kolumny znajdują się w danej tabeli wystarczy wpisać:
SHOW COLUMNS FROM nazwa_tabeli;
|
Natomiast do sprawdzenia jakie bazy danych istnieją na koncie zalogowanego użytkownika używa się:
Polecenie SHOW wypisuje nazwy tabel, baz danych czy też kolumn danej tabeli wraz typami i określonymi parametrami.
Zapytania i operacje
Do operacji na bazach danych MySQL używamy zapytań. Podstawowy przykład został przedstawiony wyżej - zaprojektowanie pierwszej tabeli. Poniżej przeczytasz jakie operacje można wykonywać na uprzednio stworzonej tabeli.
INSERT - wstaw (włóż)
Zapytanie INSERT odnosi się do wstawiania nowych rekordów. INSERT można zastosować na co najmniej dwa sposoby:
INSERT INTO nazwa_tabeli VALUES ('wartosc_kol_1', 'wartosc_kol_2', NULL, 'wartosc_kol_n');
|
W tym wypadku podaje się kolejno wartości dla kolumn. Jeśli kolumna ma zawierać puste pole trzeba wpisać NULL (w powyższym przykładzie jest to kolumna trzecia).
Sposób ten powinno się wykorzystywać, jeśli wszystkie kolumny mają zostać wypełnione. Dla niewielkich tabel o kilku kolumnach może okazać się to przydatne i szybsze, ale również bardzo podatne na błędy (kolejność musi być zachowana).
Natomiast drugi sposób wygląda tak:
INSERT INTO nazwa_tabeli (kolumna_1, kolumna_7) VALUES ('wartość kol. pierwszej', 'wartość kol. siódmej');
|
Tutaj sam decydujesz jakie wartości i gdzie chcesz wpisać. Nie musisz ich wstawiać po kolei. Jeżeli większość kolumn ma mieć wartości domyślne to zaleca się właśnie takie użycie tego polecenia.
Teraz pokażę jak wstawić przykładowy rekord do tabeli, którą utworzyłem wcześniej:
INSERT INTO uzytkownicy (imie, nazwisko, email, data_dodania) VALUES ('Bogdan', 'Przykładowski', 'b.example@domena.pl', NOW() );
|
Jak widać do określenia daty dodania użyłem funkcji NOW(), której używa się do określenia aktualnego czasu. Funkcja NOW() nie jest wpisana w apostrofy.
Po wydaniu polecenia SELECT można wyświetlić te dane (o tym dalej).
|
Rys. 1. Polecenie insert (dwa sposoby) - efekt
|
Spróbuj teraz samodzielnie dodać kilka rekordów na dwa sposoby - przydadzą się do dalszych ćwiczeń.
Pamiętaj, że w pierwszym sposobie musisz jawnie podać wartości wszystkich kolumn - dla pierwszej kolumny 'uid' przypisz wartość NULL (bez apostrofów) - spowoduje to przydzielenie pierwszego wolnego identyfikatora dla tego pola.
SELECT - wybierz
Służy do wybierania rekordów z bazy danych. Składnia jest bardzo prosta:
SELECT * FROM nazwa_tabeli;
|
Powyższa instrukcja spowoduje wybranie wszystkich rekordów z tabeli o danej nazwie. Natomiast, aby wybrać określone kolumny należy użyć następującej składni:
SELECT kolumna1, kolumna2 FROM nazwa_tabeli;
|
Jeżeli nie użyjemy żadnych instrukcji warunkowych zostaną wybrane wszystkie wypisane kolumny i np. wyświetlone na ekranie.
Instrukcje warunkowe i dodatkowe
Niezwykle ważnymi elementami, w operowaniu baz danych, są instrukcje "sterujące" czy "warunkowe". Są szczególnie ważne podczas budowy bardziej skomplikowanych projektów. Nie oznacza to, że są one niezbędne - wręcz przeciwnie - możesz wcale ich nie używać.
Warunek WHERE
Możesz jej użyć do określenia, do których rekordów chcesz się odwołać - czyli sprecyzować zapytanie. Określasz wartość danej kolumny rekordu, np.:
SELECT * FROM nazwa_tabeli WHERE imie='Marian';
|
Powyższe zapytanie powinno wyświetlić wszystkie rekordy (i wszystkie kolumny), których wartość kolumny "imie" odpowiada ciągowi znaków "Marian". Wartość może być dowolna.
Do określenia warunków możemy stosować operatory takie jak: =, <, >, <=, >= czy != (różny) - czyli te znane z języków programowania. Oprócz tego istnieją jeszcze inne:
|
Rys. 2. Polecenie insert, select oraz instrukcja warunkowa - efekty
|
Oprócz tego możemy łączyć ze sobą warunki poprzez OR (także ||) - oznacza logiczne "lub" czyli, że co najmniej jeden warunek został spełniony, oraz AND (także &&) - oznacza logiczne "i" czyli, że wszystkie warunki zostały spełnione. Jeżeli użyjesz samego NOT (lub !) - będzie to oznaczać, że do wykonania instrukcji warunek nie może być spełniony.
LIMIT
Jest to ograniczenie wyników zapytania. Jeśli posłużysz się powyższą instrukcją WHERE, wyświetlą się wszystkie rekordy, których kolumna "imie" ma wartość "Marian". Jeżeli chcesz wyświetlić jeden rekord na końcu zapytania wpisz LIMIT 1, np.:
SELECT * FROM nazwa_tabeli LIMIT 1;
|
Zostanie wyświetlony pierwszy rekord spełniający określone kryteria.
ORDER BY
Za pomocą tej instrukcji możemy uporządkować (posortować) wyniki zapytania. Mamy tutaj dwie możliwości: ASC - alfabetycznie a-Z lub liczbowo rosnąco ( jeśli sortujesz wg. dat to pierwsza, która się wyświetli będzie tą najstarszą) oraz DESC - odwrotnie do ASC.
SELECT imie, nazwisko, data_dodania ORDER BY data_dodania DESC;
|
Instrukcje niebezpieczne
Istnieją też polecenia, na które należy uważać. Jeden mały błąd może spowodować, że baza danych zostanie zepsuta (a konkretnie zapisane w niej wartości). Przed testowaniem tych poleceń zaleca się zrobienie kopii zapasowej bazy.
UPDATE - aktualizuj
Jeżeli chcesz ponownie zapisać coś do jakiegoś rekordu użyj UPDATE. Jednak uważaj - jeżeli nie zastosujesz odpowiedniej konstrukcji zapytania z wyraźnym warunkiem określającym jeden rekord (lub więcej) - zostaną zaktualizowane wszystkie rekordy.
Ogólna postać zapytania wygląda następująco:
UPDATE nazwa_tabeli SET kolumna='wartosc';
|
Jednak zwykle używa się instrukcji WHERE do określenia, który rekord (lub rekordy) ma być uaktualniony.
Przykładem uaktualnienia jedynego możliwego rekordu w tabeli jest następująca składnia:
UPDATE uzytkownicy SET imie='Romek' WHERE uid = 2;
|
|
Rys. 3. Polecenie update - efekty
|
DELETE - usuń
Czasami przyjdzie potrzeba usunąć jakiś rekord - do tego służy polecenie DELETE:
DELETE FROM nazwa_tabeli WHERE kolumna='wartosc';
|
Najbezpieczniejszym sposobem usuwania tylko jednego rekordu, jest określenie unikalnego identyfikatora, który nie występuje w innych rekordach, czyli np.
DELETE FROM uzytkownicy WHERE uid = 1;
|
Jeżeli nie zastosujesz polecenie WHERE stracisz nieodwracalnie wszystkie rekordy w tej tabeli!
DROP - wyrzucać
Za pomocą tego polecenia możesz usunąć np. całą tabelę - DROP nazwa_tabeli; lub nawet całą bazę danych - DROP nazwa_bazy;. Pamiętaj jednak, że wszystkie dane zostaną utracone bezpowrotnie, dlatego najlepiej zrobić kopię bazy danych.
Podsumowanie
Powyżej przedstawiono przykładowe zapytania MySQL, które pomogą postawić pierwsze kroki. Znajomość poleceń INSERT, SELECT, UPDATE oraz LIMIT, ORDER BY oraz WHERE jest wystarczająca do wykorzystania bazy danych w dosyć funkcjonalny sposób.
Podczas uaktualniania / kasowania rekordów należy postępować ostrożnie. Zawsze należy używać instrukcji warunkowych - chyba, że wszystkie rekordy spełniają dany warunek.
Wartości tabel, np. w instrukcjach warunkowych, określa się co najmniej na trzy sposoby: operatorem pisanym (WHERE kolumna IS NULL), dla wartości znakowych - wartość wpisywana jest w nawiasie (WHERE kolumna='wartosc') oraz dla wartości liczbowych - można podać liczbę bez nawiasów (WHERE kolumna != 2).