MySQL - viena iš reliacinių duomenų bazių apdorojimo sistemų1 « RDBMS - relational database management system. » . 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 « Client programs », naudojamos susisiekti su serveriu. Keleta iš tokių programų yra:
mysql - SQL užklausų3 « Queries » 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 « SQL - Structured Query Language. », 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.

Š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

hostname 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 slaptažodž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.

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.


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:






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', '[email protected]');

INSERT INTO vartotojai (vardas, pavarde, elpastas) VALUES ('Jonas', 'Jonaitis', '[email protected]');

INSERT INTO vartotojai SET vardas='Petras', elpastas='[email protected]';

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;

Į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 "____";

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 lentelės_pavadinimas.stulpelio_pavadinimas 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.


Į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:

UPDATE lenteles_pav SET kuriuos stulpelius keisti WHERE kuriuos įrašus keisti

Pavyzdžiui:

UPDATE vartotojai SET vardas="Jonas" WHERE elpastas="[email protected]";


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 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', '[email protected]'));

Pabaigus darbą su duombaze, reikia panaikinti įsteigtą ryšį:

mysql_close($db);
//perduodamas įsteigto ryšio identifikatorius

---
[^] Atgal
[«] Skaitykla

* * Gen. time: 0.0287
* © xneox.com