Professional Documents
Culture Documents
Podstawy Mysql
Podstawy Mysql
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;
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;
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 _ 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.