Podstawy Mysql

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 18

Kurs Podstawy MySQL

Krtkie info. Autorem kursu jest Piotr Jdrusik. Kurs jest wasnoci serwisu MySQL FAQ www.mysqlfaq.prv.pl , email: mysqlfaq@twister.pl.

1. Tworzymy baz. Stworzymy pierwsz baz o nazwie user. mysql> create database user; Poprawne wykonanie polecenia powinno da wynik: Query OK, 1 row affected (0.00 sec)

Po stworzeniu bazy, moemy przej do tworzenia tabel. Jednak samo stworzenie bazy, nie oznacza e staje si ona baz biec i moemy na niej wykonywa operacje. Pokazuje to ponisze polecenie, sprawdzajce jaka baza jest obecnie uywana. mysql> select database(); Efektem polecenia bdzie:

Aby mc korzysta z konkretnej bazy, naley wybra j jako baz biec: mysql> use user; Po poprawnym wykonaniu polecenia, MySQL powinien zwrci komunikat: Database changed

OK. Teraz moemy ponownie sprawdzi jaka baza jest baz biec: mysql> select database();

Od tej pory wszystkie operacje bd wykonywane na bazie user. Innym sposobem wyboru bazy jest wymienienie jej nazwy w wierszu polece podczas wywoania mysql: C:/>mysql user Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 to server version: 3.23.32 mysql> select database();

2. Tworzymy tabele. Stworzymy teraz tabel dane, w ktrej bdziemy przechowywa dane odnonie uytkownikw. mysql> create table dane -> ( -> imie varchar(15) not null, -> nazwisko varchar(20) not null, -> email varchar(50) null, -> ulica varchar(50) null, -> miasto varchar(50) null, -> data_ur date null default '0000-00-00' -> );

Aby sprawdzi czy tabela zostaa stworzona poprawnie wykonujemy ponisze polecenie: mysql> describe dane;

Instrukcja describe (mona j uywa skrtowo desc) pokazuje informacje odnonie podanej tabeli. A jak sprawdzi jakie tabele zawiera konkretna baza ? Umoliwia to polecenie SHOW. mysql> show tables;

W ten sam sposb moemy sprawdzi jakie bazy istniej na serwerze. mysql> show databases;

Wracajc do tworzenia tabel. Aby nie wpisywa caej instrukcji tworzenia tabeli moemy wczeniej stworzy plik z rozszerzeniem .sql, w ktrym wpisujemy ca skadni tworzenia tabeli, a nastpnie wywoujemy jedynie proste polecenie: C:/>mysql user < user.sql

3. Dodawanie nowych rekordw. Stworzylimy baz user i tabel dane. Teraz zajmijmy si wprowadzeniem kilku rekordw do tabeli z danymi uytkownikw. Dane dodawanego usera: imi: Piotr, nazwisko: Walczak email: walus@plus.pl ulica: Lesna miasta: Warszawa data urodzenia: 1980-02-25 A wic wprowadzamy dane: mysql> insert into dane -> values('Piotr','Walczak','walus@plus.pl','Lesna','Warszawa','1980-02-25'); Query OK, 1 row affected (0.00 sec) Dodajmy jeszcze jednego uytkownika, tym razem znajc tylko jego imi, nazwisko i email. imi: Adam, nazwisko: Kowalski, email: adam@firma.com.pl mysql> insert into dane -> (imie,nazwisko,email) -> values ('Adam','Kowalski','adam@firma.com.pl'); Query OK, 1 row affected (0.00 sec) Oczywicie zamiast wpisywa wszystkich naszych uytkownikw rcznie, moemy ich dane zgromadzi w pliku, z ktrego dane moemy wczyta do tabeli: mysql>load data local infile dane.txt into table dane; Domylnie instrukcja Load Data zakada, e wartoci kolumn bd ograniczone przez tabulatory i e wiersze bd si koczy przy uyciu znakw koca wierszy. Zakada si rwnie, e wartoci wystpuj w kolejnoci, w ktrej kolumny s przechowywane w tabeli. Moliwe jest zdefiniowanie innego formatu pliku lub okrelenie innego porzdku kolumn. Jednak w tym kursie tym zajmowa si nie bdziemy. Aby zaadowa dane z pliku moemy rwnie uy programu mysqlimport, ktry generuje instrukcj LOAD DATA, ktra pozwala na zaadowanie danych z pliku dane.txt do tabeli dane. mysqlimport --local user dane.txt

4. Pobieranie informacji. Instrukcja SELECT pozwala pobiera i wywietla informacje z tabel, oglnie lub bardzo szczegowo. Oglna posta instrukcji SELECT jest nastpujca: SELECT co_pobra FROM tabela lub tabele WHERE warunki_ktre_musz_spenia_dane Aby wywietli ca zawarto tabeli wykonujemy: mysql> select * from dane;

Mona wybra tylko jedn kolumn z tabeli: mysql> select email from dane;

A take kilka kolumn: mysql> select ulica,miasto from dane;

Mona take przestawia kolejno kolumn, a take podawa kilka razy jedn kolumn. mysql> select miasto,email,imie from dane;

5. Okrelenie kryteriw pobierania danych. Aby ograniczy zbir pobranych rekordw przez instrukcj SELECT, naley uy klauzuli WHERE, ktra okrela kryteria wyboru wierszy. Wybierzmy osoby, ktre urodziy si przed 01-01-1970. mysql> select imie,nazwisko from dane where data_ur<'1970-01-01';

W kolejnym przykadzie sprbujmy wybra osoby zamieszkae w Krakowie. mysql> select imie,nazwisko from dane where miasto='krakow';

A teraz poczmy dwa poprzednie przykady i wybierzmy osoby zamieszkae poza Krakowem i urodzone po 01-01-1970. mysql> select imie,nazwisko,miasto,data_ur from dane -> where data_ur>'1970-01-01' -> and miasto <> 'Krakow';

Przy wyborze danych moemy stosowa operatory arytmetyczne, porwnania i logiczne. Operatory arytmetyczne: + dodawanie - odejmowanie * mnoenie / dzielenie Operatory porwnania: < mniejsze ni <= mniejsze ni lub rwne = rwne != lub <> nierwne >= wiksze ni lub rwne > wiksze ni Operatory logiczne: AND logiczne i OR logiczne lub NOT logiczne przeczenie

6. Sortowanie wynikw zapytania. Aby uporzdkowa pobierane rekordy, naley uy klauzuli ORDER BY. Na pocztek sprbujmy posortowa pobierane dane wedug nazwiska (od A do Z). mysql> select imie,nazwisko from dane order by nazwisko;

Moemy okreli w jaki sposb sortowa rekordy, czy w kierunku rosncym ASC lub malejcym DESC. A wic pobierzmy te same dane co w poprzednim przykadzie ale posortujmy je w odwrotnej kolejnoci czyli malejcej: mysql> select imie,nazwisko from dane order by nazwisko desc;

Porzdek rosncy jest domylny, jeli nie okrelimy inaczej. Moemy sortowa dwie kolumny: mysql> select imie,nazwisko from dane order by imie asc, nazwisko asc;

7. Ograniczanie wynikw zapyta. Gdy rezultatem zapytania jest bardzo duo wierszy, moemy ograniczy wynik uywajc klauzuli LIMIT. Klauzula LIMIT pozwala ograniczy wynik zapytania do n wierszy caego rezultatu. W naszej tabeli mamy 6 rekordw. Ograniczmy wynik zapytania do 3 rekordw: mysql> select imie,email from dane limit 3;

Moemy wywietli wynik zapytania poczwszy od jakiego rekordu, w naszym przypadku wywietlmy rekordy poczwszy od 2 (pierwszy rekord ma numer 0, nie 1), wywietlajc dwa kolejne rekordy: mysql> select imie,email from dane limit 1,2;

8. czenie i nazywanie wartoci kolumn wyjciowych. Wybierzmy z naszej tabeli imiona i nazwiska, poczmy je w jedn kolumn o nazwie Imi Nazwisko. mysql> select concat(imie," ",nazwisko) as "Imie - Nazwisko" from dane;

9. Praca z datami. Przetestujmy kilka przykadw, myl e nie sprawia one zbytnich kopotw. mysql> select email,data_ur from dane where data_ur = '1980-02-25';

mysql> select email,data_ur from dane where data_ur >= '1955-01-01' and data_ur <= '1980-01-01';

Aby sprawdzi lub pobra cz daty, mona uy funkcji takich jak YEAR(), MONTH(), DAYOFMONTH(). mysql> select imie,data_ur from dane where month(data_ur) = 9;

mysql> select imie,data_ur from dane where year(data_ur) > 1970;

Sprbujmy teraz stworzy troch bardziej skomplikowane zapytanie, obliczajce wiek danej osoby. mysql> select imie,nazwisko, -> floor((to_days(curdate()) - to_days(data_ur))/365) as wiek -> from dane;

Uyta tutaj funkcja FLOOR obcina cz uamkow wieku aby uzyska liczb cakowit. Po wicej informacji odnonie funkcji operujcych na datach odsyam do dziau PODSTAWY->Funkcje cz.IV.

10. Dopasowanie do wzorca. Przy wybieraniu rekordw moemy wykona operacj dopasowania do wzorca, w ten sposb mona wybra rekordy bez podawania dokadnej wartoci. Aby wykona operacje dopasowania naley uy specjalnych operatorw LIKE lub NOT LIKE i okreli cig znakw zawierajcych znaki zastpcze. mysql> select imie,nazwisko from dane where nazwisko like 'w%';

Znak % oznacza dopasowanie do jakiejkolwiek sekwencji znakw.

mysql> select imie,email from dane where imie like '_____';

Znak _ okrela pojedynczy znak. W powyszym przykadzie aby wybra imiona skadajce si z piciu liter naley poda znak _ pi razy. I jeszcze jeden prosty przykad. Znajdmy osoby, ktre skrzynki e-mail maj zaoone na serwerze firma.com.pl lub firma.pl: mysql> select imie,nazwisko,email from dane where email like '%firma%';

11. Tworzenie podsumowa. Aby odrzuci w wyniku zapytania wszystkie wiersze, ktre si powtarzaj uywamy sowa kluczowego DISTINCT. Polecenie bez uycia powyszego sowa kluczowego da nam wynik: mysql> select miasto from dane;

Gdy uyjemy sowa kluczowego, zapytanie zwrci nam wynik: mysql> select distinct miasto from dane;

czyli odrzuci rekordy, ktre si powtarzaj. Bardzo przydatna jest funkcja COUNT(), ktra zlicza liczb wierszy otrzymanych w wyniku zapytania. Ponisze polecenie zwrci nam ilo wszystkich rekordw w tabeli dane: mysql> select count(*) from dane;

Moemy obliczy ile osb pochodzi z Warszawy: mysql> select count(*) from dane where miasto = 'warszawa';

I jeszcze jeden przykad, w ktrym obliczymy ile osb mieszka w danym miecie: mysql> select miasto, count(*) from dane group by miasto;

Wana uwaga. W takim zapytaniu musimy uy przed zliczeniem miast, grupowania wynikw wedug miasta, gdy w przeciwnym przypadku zapytanie zwrci nam bd. Oprcz funkcji zliczajcej COUNT(), mamy rwnie dostpne funkcje MIN(), MAX(), SUM() i AVG(). Wybierzmy teraz najstarszego uytkownika; mysql> select min(data_ur) as "NAJSTARSZY" from dane;

12. Pobieranie informacji z wielu tabel. Na pocztek musimy stworzy drug tabel. Bdzie ona miaa nazw skrzynka i powiedzmy, e bdziemy w niej przechowywa dane odnocie iloci wiadomoci e-mail, jakie dany uytkownik ma w swojej skrzynce. mysql> create table skrzynka -> ( -> email varchar(50) not null, -> listy int -> ); Query OK, 0 rows affected (0.00 sec) Zobaczmy zatem jak bdzie wyglda nasza nowa tabela: mysql> select * from skrzynka;

Przy wybieraniu danych z dwch tabel nasze zapytanie bdzie rnio si od dotychczasowych zapyta pod dwoma wzgldami: 1. w klauzuli FROM musimy wymieni wicej ni jedn tabel, gdy dane maj by pobierane z wicej ni jednej tabeli; FROM dane,skrzynka

2. w klauzuli WHERE okrela si, e tabele dane i skrzynka s zczone przez dopasowanie wartoci email w kadej tabeli: WHERE . . . dane.email = skrzynka.email. Wybierzmy teraz z tabeli dane - imi, nazwisko i email usera oraz z tabeli skrzynka - ilo listw jakie ma dany user: mysql> select dane.imie,dane.nazwisko,dane.email,skrzynka.listy -> from dane,skrzynka -> where dane.email = skrzynka.email;

13. Usuwanie i aktualizacja istniejcych rekordw. Do usuwania rekordw stosujemy instrukcj DELETE: DELETE FROM nazwa_tabeli WHERE ktre_rekordy_usun; Jeeli nie podamy klauzuli WHERE wykasowane zostan wszystkie rekordy z wskazanej tabeli. Klauzul WHERE wybieramy rekordy, ktre chcemy skasowa. Usumy z tabeli dane wszystkie dane userw, ktrzy mieszkaj w Krakowie. mysql> delete from dane where miasto = 'Krakow'; Query OK, 2 rows affected (0.05 sec) Usumy z tabeli skrzynka wszystkich, ktrzy maj wicej ni 10 e-maili. mysql> delete from skrzynka where listy > 10; Query OK, 1 row affected (0.06 sec) Aby zmodyfikowa rekordy, naley uy instrukcji UPDATE. UPDATE nazwa_tabeli SET ktre_kolumny_zmieni WHERE ktre_rekordy_zmieni;

Dodajmy najpierw nowego usera: Imie: Darek Nazwisko: Kaszana mysql> insert dane(imie,nazwisko) values('Darek','Kaszana'); Query OK, 1 row affected (0.06 sec) OK. A teraz zamy, e chcemy dopisa jeszcze jego miejsce zamieszkania i e-mail: Miasto: Ld e-mail: kaszanka@sklep.kasza.pl mysql> update dane set miasto = 'Lodz', email = 'kaszanka@sklep.kasza.pl' -> where imie = 'Darek' and nazwisko = 'Kaszana'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0

14. Zmiana struktury tabel. Jeeli nasze tabele s ju stworzone, a my dowiadujemy si, e w tabeli dane powinnimy byli umieci jeszcze pole numer_id, ktre by nadawao unikatowy numer kademu z uytkownikw. W takiej sytuacji wcale nie musimy kasowa tabeli, tworzy jej jeszcze raz, teraz ju z polem numer_id i wprowadza do niej dane. W takim przypadku moemy posuy si instrukcj ALTER TABLE, dziki ktrej moemy dodawa i usuwa kolumny, zmienia typ kolumn itp. No wic dodajmy kolumn numer_id: mysql> alter table dane add numer_id int unsigned not null auto_increment primary key; Query OK, 5 rows affected (0.05 sec) Records: 5 Duplicates: 0 Warnings: 0 Teraz jeeli przejrzymy dane w tabeli zauwaymy, e kolumna numer_id zostaa dodana i automatycznie zostay stworzone numery dla wszystkich naszych uytkownikw. mysql> select imie,nazwisko,email,numer_id from dane;

15. Podsumowanie. Kurs, przez ktry przebrnlimy to tylko podstawy, dla wszystkich tych, ktrzy zaczynaj dopiero prac z MySQL. Dla pogbienia wiedzy odsyam do artykuw zawartych w serwisie, a pogrupowanych w chwili obecnej na dziay: podstawy, administracja, skrypty. Znajdziecie tam mam nadziej bardziej dogbne informacje na tematy poruszone w kursie. A wszelkie problemy, kopoty, niejasnoci zgaszajcie na FORUM, a my postaramy si je wyjania.

You might also like