Microsoft Word - liet_MySQL

Page 1

Egl Karalyt egle@karaliai.com 2002 vasario 12d.

MySQL MySQL - viena iš reliacini duomen bazi apdorojimo sistem 1. Duomen bazi sistema yra skirta tvarkyti, r šiuoti ir manipuliuoti informacij . Kadangi MySQL duomen baz leidžia traukti, keisti ir ištrinti informacij iš keli lenteli vienu metu pagal nurodytus kriterijus, ji priskiriama reliacin ms duombaz ms (angl. “relational”). MySQL sistemoje duomenys yra talpinami lentel se. Kiekviena lentel yra suskirstyta eilutes ir stulpelius. Kiekviena eilut atitinka vien raš . rašas gali tur ti keli r ši informacij , kuri priklauso nuo stulpeli tip ir pavadinim . Pvz. jei duombaz je esanti lentel pavadinimu naujienos yra šios strukt ros Data

Pavadinimas

tekstas

tuomet kiekviena lentel je laikoma naujiena tur s tris informacijos atšakas: dat , pavadinim ir naujienos tekst . MySQL duombaz s sistem , instaliuot serveryje (UNIX, Windows ar pan.), sudaro šios dalys: • •

• •

SQL serveris, palaikantis MySQL ir suteikiantis pri jim prie duomen baz s ir joje laikomos informacijos. Klientin s programos2, naudojamos susisiekti su serveriu. Keleta iš toki program yra: 3 ♦ mysql – SQL užklaus siuntimas serveriui; ♦ mysqldump – duombaz s trynimas, back-up, informacijos perk limas kit SQL server (neb tinai MySQL), lentel s strukt ros gavimas, ♦ mysqlimport – informacijos perk limas iš fail lentel , ♦ mysqladmin – duombaz s administravimas. Administravimo irankiai; Programavimo interfeisas skirtas bendravimo su SQL serveriu program k rimui.

MySQL veikia kliento-serverio principu. Naudojantis mysql klientu j s rašote SQL užklausas. SQL4, strukt rizuota užklaus kalba, yra standartin beveik vis moderni duombazi kalba. mysql nusiun ia j s parašyt užklaus SQL serveriui, kuris yra toje pa ioje vietoje kur laikomi duombaz s duomenys. Serveris, gav s užklaus iš klient , atrenka informacij iš duombaz s pagal užklausoje nurodytus kriterijus. V liau serveris rezultatus persiun ia klientui, kuris juos parodo.

1


Šiuo metu MySQL yra bene grei iausia duombazi sistema. Ji lengvai instaliuojama ir administruojama. Duomenys joje gali b ti manipuliuojami keletu b du: naudojantis klientini program komandine eilute, naršykle ar programavimo kalbomis, pavyzdžiui, PHP, C, Perl, Java, Python, ir t.t.

Darbas su MySQL Norint prad ti darb su duombaze, pirmiausia reikia prisijungti prie MySQL sistemos (jau steigus ryš su serveriu tekstiniame r žime – pvz., telnet): mysql –h hostname –u user_name –p

ir user_name reikia pakeisti atitinkamais duomenimis, kuriuos, jei nesate pats administratorius, tur tumete gauti iš serverio administratoriaus suk rusio jums duombaz . hostname yra serverio adresas, kuriame yra instaliuota MySQL sistema. Jis tur t b ti localhost jei duombaz yra tame pa iame serveryje iš kurio jungiat s. Jei jungiat s prie kito (remote) kompiuterio, reikia nurodyti to kompiuterio adres . –p komanda liepia mysql klientui paprašyti slaptazodžio. Jei nenurodysite šios komandos, tuomet mysql manys, kad j s vartotojo vardui nereikalingas slaptažodis prisijungimui prie sistemos. Jei j s nesate privilegijuotas vartotojas (t.y. administratorius) nenurodžius –p j s neb site prijungtas prie sistemos. Komanda QUIT atjungia jus nuo serverio. hostname

J s parašyt komand mysql nusiun ia serveriui. Serveris vykdo gautas instrukcijas ir gr žina rezultatus atgal mysql klientui, kuris parodo gautus duomenis.

Duomen baz s k rimas Norint informacij laikyti duombaz s lentel se, pirmiausia reikia sukurti pa i duomen baz . Duomen bazi MySQL sistemoje gali b ti keleta, kaip ir vartotoj , turin i teis jomis naudotis. Norint sukurti duomen baz reikia naudoti CREATE DATABASE komand ir nurodyti kuriamos duombaz s vard : CREATE DATABASE mano_db;

Ši eilut sukurs duomen baz pavadinimu mano_db. Norint paži r ti visas duombazes, esan ias j s MySQL sistemoje naudojama komanda SHOW DATABASES. Prieš pradedant darb su duombaze, reikia nurodyti serveriui, kuri duombaz naudosite. Tam naudojama komanda USE ir nurodomas duombaz s pavadinimas: USE mano_db

Visos v liau rašomos SQL komandos bus taikomos duombazei pavadinimu mano_db.

2


Lenteli k rimas Tur dami pri jim prie duombaz s, galite kurti lenteles skirtas sur šiuotiems duomenims laikyti. Viena duombaz gali tur ti daug lenteli skirtingais pavadinimais ar konstrukcijomis. Sakykime mes norime sukurti lentel pavadinimu vartotojai, kuri laikyt j s tinklapio naujien aplinkraš io vartotoj duomenis: vard , pavard ir el.pašto adres . Kiekviena lentel turi tur ti savo pavadinim bei specifin konstrukcij , nurodant kiek ir koki stulpeli ji tur s. Komanda CREATE TABLE naudojama kurti lentel ms. Žemiau esantis pavyzdys sukurs jau aptart lentel vartotojai: CREATE TABLE vartotojai ( id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, vardas VARCHAR(30) NOT NULL, pavarde VARCHAR(30) NOT NULL, elpastas VARCHAR(30) NOT NULL, PRIMARY KEY (id) );

Kiekvienas SQL sakinys turi baigtis kabliataškiu. Jei paspaud ENTER neb site pad j kabliataškio, j s komanda nebus vykdoma. SQL lauks tol, kol j s baigsite rašyti komand (per kelias eilutes šiuo atveju) ir tuomet, pad j kabliatašk , nurodysite komandos rašymo baigim . Tod l CREATE TABLE galite rašyti per kelias eilutes ir tik v liau pad ti kabliatašk . Kiekviena eilut skliausteliuose atitinka vieno lentel s stulpelio aprašym . Pirmiausia nurodomas stulpelio pavadinimas, v liau jo tipas bei papildomi duomenys. Šiuo atveju stulpeliuose vardas ir pavarde bus laikomas tekstas neilgesnis kaip 30 simboli . Stulpelis id laikys sveikuosius skai ius be trupmenin s dalies. Atributas UNSIGNED nurodo, jog šiame stulpelyje negalima laikyti neigiam skai i . NOT NULL nurodo, kad stulpelis negali b ti tuš ias – jame visada turi b ti kažkokia reikšm . AUTO_INCREMENT yra specialus MySQL atributas. Jei naujai traukiamas rašas lentel netur t reikšm s stulpeliui id, tuomet MySQL automatiškai sugeneruot skai i vienu skai iumi didesn nei didžiausia reikšm jau esanti tame stulpelyje. PRIMARY KEY nurodo, jog stulpelyje esanti reikšm turi b ti unikali, t.y. ji negali kartotis keliose eilut se. Stulpelis, kuriame automatiškai turi b ti generuojama reikšm (AUTO_INCREMENT) visada turi b ti PRIMARY KEY tipo. Lentel gali tur ti tiktai vien tokios r šies stulpel . Sukurtos lentel s vartotojai konfiguracija atrodys taip:

3


Nauj

raš

traukimas

Duomenys lentel gali b ti traukti keliais b dais: naudojant SQL INSERT komandas arba perkeliant duomenis iš failo. Keletas pavyzdži kaip naudoti SQL INSERT sakinius: INSERT INTO vartotojai VALUES (‘’, ‘Egle’, ‘Karalyte’, ‘karalyte@yahoo.com’); INSERT INTO vartotojai (vardas, pavarde, elpastas) VALUES (‘Jonas’, ‘Jonaitis’, ‘jonas@email.com’); INSERT INTO vartotojai SET vardas=’Petras’, elpastas=’petras@email.com’;

Kadangi antrame ir tre iame sakiniuose nebuvo nurodytos id reikšm s, MySQL pati sugeneruos šio stulpelio reikšm ir j terps. Duomen

traukimui lentel iš failo, naudojama LOAD komanda:

LOAD DATA LOCAL INFILE “sarasas.txt” INTO TABLE vartotojai;

Failas sarasas.txt turi b ti darbin je direktorijoje. MySQL persiun ia t fail serveriui, kuris jame esan i informacij perkelia lentel vartotojai. Faile raš informacija turi b ti surašyta ta pa ia tvarka kaip stulpeliai yra lentel se. Stulpeli reikšm s turi b ti atskirtos tab klavišu. rašai turi prasid ti iš nauj eilu i .

Informacijos atrinkimas nurodant kriterijus Komanda SELECT leidžia atrinkti ir parodyti informacij iš lenteli pagal nurodytus kriterijus. Norint parodyti visus lentel s vartotojai rašus naudojamas šis sakinys: SELECT * FROM vartotojai;

Galima parodyti tik vien rašo stulpel :

SELECT vardas FROM vartotojai WHERE id=2;

Rodyti rašus, kuri id yra didesni už skai i 2: SELECT * FROM vartotojai WHERE id >2;

Rodyti tik skirtingus vartotoj

vartotojus:

SELECT DISTINCT vardas FROM vartotojai;

Rodyti vartotoj vardus, kurie neturi el.pašto adreso:

SELECT vardas FROM vartotojai WHERE elpastas IS NULL;

4


rašus galima rodyti skirtinga tvarka nei jie sud ti lentel . Nenurodant ASC arba DESC atributo po ORDER BY, rašai bus rodomi did jimo (pagal ab c l ) tvarka. raš rodymas maž jimo tvarka:

SELECT * FROM vartotojai ORDER BY name DESC;

raš skai i galima riboti su atributu LIMIT, t.y. nurodyti kiek raš iš lentel s turi b ti parodoma. Šis sakinys parodys pirmuosius penkis lentel s vartotojai rašus: SELECT * FROM vartotojai ORDER BY name LIMIT 5; LIMIT taip pat leidžia rodyti rašus esan ius lentel s viduryje. Pirmasis skai ius einantis po LIMIT nurodo pirm rodom raš (lentel s eilut s numer ), antrasis – kiek raš žemyn rodyti: SELECT * FROM vartotojai ORDER BY name LIMIT 5, 10;

Šiuo atveju bus parodytos 6-16 eilut s. Rodomus rašus galima rušiuoti pagal specialias formules. Pavyzdžiui, atsitiktinai parinkti lentel s raš galima šiuo b du: SELECT * FROM vartotojai ORDER BY RAND() LIMIT 1;

Žemiau esantis sakinys sujungs vartotoj vardus ir pavardes, atskirtus tarpu, vien nauj stulpel pavadinimu vartotojas: SELECT CONCAT(vardas, “ “ ,pavarde) AS vartotojas FROM vartotojai;

Paieška MySQL leidžia atlikti paiešk pagal žodžio dal ar nurodytas raides. Taip pat galima atrinkti reikšmes, nurodant tik pa io žodžio ilg . Žodžio paieškai naudojami operatoriai LIKE ir NOT LIKE bei special s ženklai. Br kšnys ‘_’ atitinka vien simbol , tuo tarpu procento ženklas ‘%’ prilygsta simboli eilei, skaitant ir NULL. Žodži paieška neišskiria didži j ir maž j raidži . Šis sakinys parodo vartotoj vardus prasidedan ius raide ‘S’ arba ‘s’: SELECT name FROM vartotojai WHERE name LIKE “W%”;

Šis sakinys parodo vartotoj vardus keturi raidži ilgio: SELECT name FROM vartotojai WHERE name LIKE “____”;

5


Funkcija COUNT(*) suskai iuoja užklausos rezultatus. Žemiau esanti komanda parodys kiek iš viso vartotoj yra lentel je vartotojai: SELECT COUNT(*) FROM vartotojai;

Informacijos traukimas iš keletos lenteli Sukurkime nauj lentel kainorastis, kurioje bus laikoma preki pavadinimai ir j kainos: CREATE TABLE kainorastis ( id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, vartotojo_id INT(10) NOT NULL, preke VARCHAR(200) NOT NULL, kaina FLOAT(10) NOT NULL, PRIMARY KEY (id) );

Stulpelio vartotojo_id reikšm atitiks vartotojo id iš lentel s vartotojai. Tokiu b du bus galima atskirti prekes pagal vartotojus, kurie jas pirko. Analogiškai, lentel je vartotojai b t galima sukurti stulpel prekes_id, kuris atitikt stulpelio id reikšm iš lentel s kainorastis. Norint sujungti prekes ir vartotojus, kurie jas pirko galima naudoti ši komand : SELECT vartotojai.vardas, kainorastis.preke FROM vartotojai, kainorastis WHERE vartotojai.id=kainorastis.vartotojo_id;

Jungiant duomenis iš keli lenteli , reikia laikytis strukt ros. Taškas skiria lentel s vard ir stulpelio toje lentel je vard . Šiame pavyzdyje bus atrinkti rašai, kuri vartotoj id atitinka vartotojo_id lentel je kainorastis. Tuomet iš atrinkt duomen bus atfiltruoti vartotoj vardai ir preki pavadinimai. lentel s_pavadinimas.stulpelio_pavadinimas

raš trynimas raš trynimui naudojama DELETE komanda: DELETE FROM lenteles_pav WHERE kuriuos

rašus trinti

Pavyzdžiui: DELETE FROM vartotojai WHERE vardas=”Jonas”;

raš atnaujinimas Atnaujinti rašus lentel je, naudojama UPDATE komanda:

6


UPDATE lenteles_pav SET kuriuos stulpelius keisti WHERE kuriuos keisti

rašus

Pavyzdžiui: UPDATE vartotojai SET vardas=”Jonas” WHERE elpastas=”jonas@jonaitis.lt”;

MySQL valdymas su PHP Informacij saugom duombaz je galima keisti, trinti, atnaujinti ne tik per specialius duombaz s interpretatorius, bet ir naudojantis PHP turimomis funkcijomis. Visas SQL komandas kaip parametrus galima perduoti specialioms PHP funkcijoms, kurios jas nusi s MySQL serveriui. MySQL serveris gautas instrukcijas interpretuos, vykdys ir rezultatus gr žins PHP „engine“, kuri perduos visk web serveriui HTML formate. Web serveris HTML kod perduos naršyklei, kuri interpretavus gaut kod , parodys rezultatus vartotojui.

Ryšio su MySQL steigimas Norint prad ti darb su duombaze, pirmiausia reikia prisijungti prie jos. Tam naudojama PHP funkcija mysql_connect(): $db = mysql_connect(“serveris”, “vartotojas”, “slaptazodis”); mysql_connect() funkcijai perduodami parametrai yra: serverio, kuriame yra MySQL duombaz adresas, vartotojo vardas ir slaptažodis prisijungimui prie duombaz s. Jei duombaz yra tame pa iame serveryje, kur patalpinsite PHP skript , bandant prisijungti prie jos, tuomet serverio adresas nurodomas kaip: localhost. Jei s kmingai prisijungiama prie duombaz s, mysql_connect() gr žina šio ryšio identifikatori . vykus prisijungimo klaidai, funkcija gražina false reikšm (t.y. 0).

Prisijungus prie duombaz s sistemos, reikia pasirinkti su kuria duombaze bus dirbama. Funkcijai mysql_select_db() perduodamas šios duombaz s pavadinimas: mysql_select_db(“db_pav”);

Instrukcij siuntimas duombazei Norint per PHP manipuliuoti duomenimis esan iais duombaz je, funkcijai

mysql_query() reikia perduoti atitinkamas SQL komandas (DELETE, SELECT, INSERT, UPDATE). Savo strukt ra šios komandos visiškai nesiskiria nuo komand rašom

tiesiogiai bendraujant su duombaze per duombaz s interpretatori . Vienintel išimtis yra

7


ta, jog perduodami funkcijai sakiniai neturi baigtis kabliataškiu. Pavyzdžiui, norint iš lentel s ištraukti vartotoj vardus, galima naudoti toki PHP instrukcij : $rezultatai = mysql_query(“SELECT vardas FROM vartotojai”);

Funkcija mysql_query() nusiun ia SQL komand serveriui, kuris, atrink s rašus, gražina nuorod atrinkt rezultat rinkin . Per ši nuorod galima manipuliuoti duomenis: juos atspausdinti, sužinoti gražint duomen skai i ir pan. Pavyzdžiui, sužinoti kiek vard buvo gražinta, galima vykdyti mysql_num_rows()funkcij : $num = mysql_num_rows($rezultatai);

Naudojant š skai i galima atspausdinti gražintus rezultatus: for ($i=0; $i<$num; $i++) { $eile = mysql_fetch_array($rezultatai); echo $eile[“vardas”]; }

for loop pereina per vis rezultat rinkin , kiekvien kart atskiriant vien raš nuo visumos su funkcija mysql_fetch_array(). rašo duomenys yra patalpinami masyve $eile, kurio indeksai atitinka lentel s stulpelio pavadinimams. Yra keletas b d ištraukti rezultatus iš identifikatoriaus. Funkcija mysql_fetch_row() rezultatus patalpina masyve, kurio indeksai atitinka stulpeli eil s numerius lentel je. Kiekvien stulpelio reikšm galima pasiekti ir tokiu b du: $eile[0], $eile[1] ir t.t. Kitas b das yra vienu kartu ištraukti tik vien stulpelio reikšm . Tokiu atveju, funkcijai mysql_result() perduodamas rezultat identifikatorius, eil s numeris (nuo nulio iki (eili skai ius – 1)) ir stulpelio pavadinimas arba stulpelio eil s numeris: $eile = mysql_result($result, $i, “vardas”); $eile = mysql_result($result, $i, 0);

Duombaz s duomen trynimas ir atnaujinimas su PHP Duombaz s duomenis trinti, traukti ir atnaujinti galima persiun iant atitinkamas SQL komandas funkcijai mysql_query(). Šios komandos yra identiškos SQL komandoms INSERT, DELETE, UPDATE, kurias jau apib dinau: mysql_query("DELETE FROM vartotojai WHERE vardas='Egle'");

mysql_query("INSERT INTO vartotojai VALUES (‘’, ‘Egle’, ‘Karalyte’, ‘karalyte@yahoo.com’));

8


Pabaigus darb su duombaze, reikia panaikinti steigt ryš :

mysql_close($db); //perduodamas

steigto ryšio identifikatorius

1

RDBMS - relational database management system. Client programs 3 Queries 4 SQL - Structured Query Language. 2

9


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.