MySQL – reprezinta un Sistem de Gestiune a Bazelor de Date Relational, si momentan este cel mai raspandit open-source, fiind folosit in special de firme mici si mijlocii, pentru baze de date care contin mii sau zeci de mii de inregistrari. Pentru firmele mari cu baze de date mari exista produse precum Oracle. Cele mai multe limbaje de programare au plugin-uri si librarii care le permit sa foloseasca acest SGBD, dar cel mai frecvent este folosit in cadrul aplicatiilor web dezvoltate in PHP si de aceea, si eu voi exemplifica tot folosind PHP.
Pentru administrarea bazelor de date se folosesc: linia de comanda, programe de management al bazei de date, in PHP cel mai folosit este phpMyAdmin, aplicatie gratuita.
Daca doriti sa instalati MySQL, puteti fie separat, downloadand kitul de pe siteul mysql.com, fie prin pachetul de aplicatii WAMP. WAMP are de asemenea instalat si phpMyAdmin, pentru gestiunea vizuala a unei baze de date.
In oricare din instalari, pentru a putea fi folosit mai usor din linia de comanda, se recomanda ca in Environment Variables -> sa existe locatia pentru mysql.exe Ex: in cazul unei instalari default cu WAMP locatia va fi: C:wampbinmysqlmysql5.1.30bin; Este important ca in momentul instalarii sa precizati o parola, aceasta fiind folosita ulterior pentru a avea acces la bazele de date. Comanda pentru a lansa mysql este: “mysql -u utilizator -p” dupa care vi se va cere sa introduceti parola; utilizatorul default este root.
Comenzi in MySQL:
– crearea unei baze de date:CREATE DATABASE “nume”; unde “nume” va fi numele bazei de date, fiecare comanda MySQL se termina cu ;
– crearea unei tabele: CREATE TABLE `”baza de date”`.`”nume tabela”`; unde “baza de date” este numele bazei de date unde dorim noua tabela, iar “nume tabela” este numele tabelei care se va crea. Daca dorim sa nu mai punem numele bazei de date la fiecare operatie asupra ei, folosim comanda: USE “baza de date”; si atunci toate comenzile vor fi interpretate pentru baza de date respectiva.
– crearea campurilor din tabele: ALTER TABLE `nume_tabela` ADD `nume_camp` TIP VARIABILA( LUNGIME ) NOT NULL; “TIP VARIABILA”, in functie de ceea ce contine campul, poate fi: INT, VARCHAR, DATE, BLOB, ENUM, SET etc., iar “LUNGIME” pentru int va fi maxim 11, pentru varchar maxim 255, date reprezinta data, cu valoare specifica, blob se foloseste in cazul textelor lungi, sau chiar pentru fisiere mici, enum si set vor avea in loc de lungime, un sir de posibilitati Ex: ENUM(“Windows”,”Linux”,”MacOS”,”Alt ceva”).
Se recomanda ca la crearea unei tabele, unul dintre campuri sa fie ‘ID’ int 11 PRIMARY KEY si AUTO INCREMENT
CREATE TABLE `new`.`b` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY
)
Creaza o tabela ‘b’, in baza de date ‘new’, tabela avand un singur camp ‘id’ care este cheia primara.
– inserarea valorilor in campurile unei tabele: INSERT INTO `nume_tabela` (`camp1`,`camp2`,…,`campn`) VALUES (‘valoare1′,’valoare2′,…,’valoaren’); Trebuie avut grija ca fiecare valoare sa corespunda unui camp, daca exista n campuri atunci vor fi tot n valori, daca exista un numar diferit de campuri sau de valori va fi afisat un mesaj de eroare. Se poate sa nu fie introduse toate campurile din tabele, Ex: `id` nu trebuie introdus la insert, acesta va primi automat o valoare incrementata fata de precedentul.
– update, aceasta comanda difera putin, in functie de numarul campurilor ce vor fi modificate, pentru doua campuri va primi ca legatura “AND”, pentru mai multe “,” – virgula.
UPDATE `camp1`=”valoare1″ , `camp2`=”valoare2″, `camp3`=”valoare3″ FROM `tabela` WHERE `id`=”valoare_id”;
-stergerea inregistrarii se face prin comanda DELETE iar stergerea campurilor sau tabelelor prin comanda DROP
@Catalin, ai dreptate, am uitat de select, mersi. Deci interogarea bazei de date se realizeaza prin comanda SELECT, in functie de necesitati, comanda poate fi:
simpla SELECT * FROM `tabela` – selecteaza toate inregistrarile din tabela * reprezinta toate campurile;
complexa SELECT `camp1`, `camp2`, `campn` FROM `tabela` WHERE `campx`=`valaore` ORDER BY `campy` DESC LIMIT 0,30;
aceasta interogare afiseaza doar valorile din campurile pe care le dorim noi “camp1″…”campn” si doar la ingreistrarile care au “campx”=”valoare”, se ordoneaza descrescator dupa “campy” si vor fi afisate primele 30 de rezultate, LIMIT are 2 parametrii, primul reprezinta rezultatul de la care se face afisarea, iar al doilea cate rezultate vor fi afisate.
MySQL permite plasarea de campuri care pot avea roluri mai speciale:
– cheie primara, cu auto increment, tipul variabilei fiind INT, reprezinta un camp menit sa identifice in mod unic o inregistrare. Orice inregistrare poate fi identificata prin acest camp, el reprezentand si cea mai buna metoda pentru a face legaturi cu alte tabele – cheie externa, aceste legaturi fiind doar logice in proiectia bazei de date, ele fiind implementate prin PHP, sau alte limbaje de programare folosite.
– cheia unica, este un delimitator, care pus asupra unui camp, nu va permite existenta valorilor duplicate. De asemenea poate identifica o inregistrare. Exemplu de astfel de campuri ar fi: username si mail, intr-o tabela pentru userii inregistrati pe un site, vrem ca fiecare username si mail sa fie unic, astfel nu se va crea confuzie printre utilizatori. Astfel de restrictii pot fi verificate si din PHP.
MySQL permite si folosirea unui limbaj de programare interior, care pe langa instructiunile de baza din orice limbaj – instructiuni alternative, repetitive…, are si functii predefinite. Ex: lower(`camp`) va avea ca rezultat afisarea informatiilor din campul respectiv cu litere mici, este folositor la extinderea unor campuri unice, Ex: username, oricum ar fi scris – Emanuel, eManuel, emanuel, EMANUEL, sa faca referire catre acelasi utilizator.
Exemplu practic:
CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(25) COLLATE utf8_bin NOT NULL,
`password` varchar(40) COLLATE utf8_bin NOT NULL,
`email` varchar(125) COLLATE utf8_bin NOT NULL,
`acces` enum(‘0′,’1′,’2’) COLLATE utf8_bin NOT NULL,
`data_inreg` datetime NOT NULL,
`ip` varchar(15) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`,`email`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=9 ;
INSERT INTO `user` (`id`, `username`, `password`, `email`, `acces`, `data_inreg`, `ip`) VALUES
(8, ‘administrator’, ‘d033e22ae348aeb5660fc2140aec35850c4da997’, ‘admin@email.com’, ‘1’, ‘2009-07-12 15:20:05’, ‘127.0.0.1’),
(6, ’emanuel’, ‘6644d1476710f90f3bf7248a8dc6249052abb08b’, ’emanuel@email.com’, ‘2’, ‘2009-07-12 14:47:30’, ‘127.0.0.1’),
(7, ‘utilizator1’, ‘6644d1476710f90f3bf7248a8dc6249052abb08b’, ‘utilizator1@email.com’, ‘0’, ‘2009-07-12 15:15:49’, ‘127.0.0.1’);
DELETE FROM `user` WHERE `id` = 7 LIMIT 1;
SELECT `id` , `username` FROM `user` WHERE `email` = “admin@email.com” AND “username” = “admin”
ORDER BY `data_inreg` ASC LIMIT 0 , 30;
UPDATE `user` SET `username` = ‘admin’, `email` = ‘admin@email.com’,
`data_inreg` = ‘2009-07-20 00:00:00’ WHERE `user`.`id` =1 LIMIT 1 ;
ALTER TABLE `user` DROP `ip`;
Vezi ca ai uitat de SELECT 🙂