notiuni avansate mysql - infoeducatie 2008
DESCRIPTION
MySql este una dintre cele mai folosite baze de date Open Source. A fost gandita pentru web si este folosita cu succes pentru a scala. Google, Wikipedia, Facebook, Amazon, Flickr si multi altii o folosesc. Dintre subiectele pe care le vom atinge: tipuri de tabele, indecsi, foreign key-uri, subquery-uri, tabele temporare, triggere, view-uri, join-uri, notiuni de proceduri stocate si multe altele. La fiecare pas voi prezenta exemple pentru a demonstra facilitatile prezentate.TRANSCRIPT
Notiuni avansate Mysql
Notiuni avansate MySQLMysqlTabeleIndecsiForeign key-uriTriggereVIEWSComenzi sql avansateJOIN-uriDESCRIBE
Notiuni avansate MySQL
Mihai Oaida <[email protected]> 01
MySQL3.23 - vechi4.1x - stabil, putine feature-uri5.0x - GA5.1 - RC6.0x - alfa
Notiuni avansate MySQL
Mihai Oaida <[email protected]> 02
TabeleTipuri de tabele
MyISAMInnoDBMemory / HEAPMERGE, MRG_MyISAMBlack holeCSVARCHIVE
Notiuni avansate MySQL
Mihai Oaida <[email protected]> 03
CREATE TABLE t( columns) ENGINE = sauALTER TABLE t ENGINE =
Indecsi• Ordonam tabelul dupa 1 sau n coloane• Tipuri de indecsi
PRIMARY KEYIndexUniqueFull Text
• Tipuri de algoritmi : BTREE si HASH• Aplicate pe 1 sau mai multe coloane (multiple index)
Notiuni avansate MySQL
Mihai Oaida <[email protected]> 04
CREATE INDEX i_name ON table_name(col1,col2,..)
Full text indexCautare in texte
Notiuni avansate MySQL
Mihai Oaida <[email protected]> 05
SELECT id,titlu FROM table WHERE
MATCH(titlu) AGAINST(‘xml’)
SELECT id,titlu FROM table WHERE
MATCH(titlu) AGAINST(‘xml’ WITH QUERY EXPANSION)
Foreign key
Ex : InnoDBSe poate pune la create tabele sau ulterior
Notiuni avansate MySQL
Mihai Oaida <[email protected]> 06
FOREIGN KEY(cat_id) REFERENCES cat(id)
Creeaza legaturile intre tabele care la proiectarele creem prin conventie. Ex : news.cat_id – cat.id
TriggereObiect asociat unui tabel care se apeleaza la un
anumit eveniment
Notiuni avansate MySQL
Mihai Oaida <[email protected]> 07
CREATE TRIGGER trig_name {BEFORE| AFTER} {INSERT,REPLACE,UPDATE, DELETE} on t
FOR EACH ROW BEGIN..sql..
END;
Exemplu
CREATE TRIGGER updateCateg AFTER INSERT ONproduseFOR EACH ROW BEGIN
UPDATE cats SET nr=nr+1 WHERE id=NEW.cat_id;
END;
Notiuni avansate MySQL
Mihai Oaida <[email protected]> 08
VIEWSCREATE VIEW view_name AS [query]DROP VIEW view_name
Notiuni avansate MySQL
Mihai Oaida <[email protected]> 09
CREATE VIEW stats_l AS SELECT l.id,l.nume, ( SELECT count( c.id ) FROM comentarii c WHERE c.lectie_id = l.id ) AS nr_comentarii , ( SELECT count( r.id ) FROM rezolvari r WHERE r.lectie_id = l.id ) AS nr_rezolvari FROM lectii l ORDER BY id ASC
SELECT * FROM stats_l
GROUP BY
SELECT cat_id,count(id) FROM posts GROUP BY id
Notiuni avansate MySQL
Mihai Oaida <[email protected]> 10
Numarul de post-uri din fiecare categorie
HAVING
SELECT cat_id,count(id) FROM posts GROUP BY id HAVING count(id)<=100
Notiuni avansate MySQL
Mihai Oaida <[email protected]> 11
Numarul de post-uri din fiecare categorie care au mai putin de 100 de post-uri
SubQuery-uriSELECT count(sum) FROM (SELECT nr AS sum FROM cats WHERE cat_id=3);
Notiuni avansate MySQL
Mihai Oaida <[email protected]> 12
SELECT lectii.nume,(SELECT count(id) FROM
rezolvari WHERE lectii.id=rezolvari.lectie_id)
AS nr FROM lectii;
JOIN-uriJoin - produs cardinal intre 2 tabele
- conditie de join
Notiuni avansate MySQL
Mihai Oaida <[email protected]> 13
SELECT camp1,camp2,.. FROM t1 [tip-join] t2 ON conditii [tip-join] t3ON conditii … [WHERE conditii]
Tipuri join
INNER JOIN - st, dr se pun daca respecta conditiaLEFT JOIN - st se pune, dr daca respecta conditiaRIGHT JOIN – dr se pune, st daca respecta conditia
Exemple – INNER JOINSELECT elevi.id,comentarii.comentariu FROM
elevi INNER JOIN comentarii ON elevi.id=comentarii.elev_id
Notiuni avansate MySQL
Mihai Oaida <[email protected]> 14
SELECT elevi.id,comentarii.comentariu FROM
elevi , comentarii WHERE elevi.id=comentarii.elev_id
SELECT e.id,c.comentariu FROM
elevi e INNER JOIN comentarii c
ON e.id=c.elev_id
LEFT JOIN
Selecteaza toti elevii pe coloana din stanga sicomentarii daca au
Notiuni avansate MySQL
Mihai Oaida <[email protected]> 15
SELECT e.username,c.comentariu FROM
elevi e LEFT JOIN comentarii c
ON e.id=c.elev_id
RIGHT Join
• Opusul lui left join• Selecteaza toate comentariile in coloana din
dreapta si pe coloana din stanga username-ul daca relatia este satisfacuta.
Daca nu se afiseaza NULL
Notiuni avansate MySQL
Mihai Oaida <[email protected]> 16
SELECT e.username,c.comentariu FROM
elevi e LEFT JOIN comentarii c
ON e.id=c.elev_id
DESCRIBE• Arata pentru fiecare tabel din sql : indecsi
folositi,tipul cautarii, nr de randuri prin care cauta,etc
• DESCRIBE [sql]• Campuri
Select_typeTablePossible_keysKeyKey_lenRowsExtra
Notiuni avansate MySQL
Mihai Oaida <[email protected]> 17
Referintehttp://dev.mysql.com/doc/refman/5.0/en/Mysql workbench
Notiuni avansate MySQL
Mihai Oaida <[email protected]> 18