notiuni avansate mysql - infoeducatie 2008

20

Click here to load reader

Upload: mihai-oaida

Post on 02-Jul-2015

1.266 views

Category:

Technology


0 download

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

Page 1: Notiuni avansate MySQL - Infoeducatie 2008

Notiuni avansate Mysql

Page 2: Notiuni avansate MySQL - Infoeducatie 2008

Notiuni avansate MySQLMysqlTabeleIndecsiForeign key-uriTriggereVIEWSComenzi sql avansateJOIN-uriDESCRIBE

Notiuni avansate MySQL

Mihai Oaida <[email protected]> 01

Page 3: Notiuni avansate MySQL - Infoeducatie 2008

MySQL3.23 - vechi4.1x - stabil, putine feature-uri5.0x - GA5.1 - RC6.0x - alfa

Notiuni avansate MySQL

Mihai Oaida <[email protected]> 02

Page 4: Notiuni avansate MySQL - Infoeducatie 2008

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 =

Page 5: Notiuni avansate MySQL - Infoeducatie 2008

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,..)

Page 6: Notiuni avansate MySQL - Infoeducatie 2008

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)

Page 7: Notiuni avansate MySQL - Infoeducatie 2008

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

Page 8: Notiuni avansate MySQL - Infoeducatie 2008

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;

Page 9: Notiuni avansate MySQL - Infoeducatie 2008

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

Page 10: Notiuni avansate MySQL - Infoeducatie 2008

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

Page 11: Notiuni avansate MySQL - Infoeducatie 2008

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

Page 12: Notiuni avansate MySQL - Infoeducatie 2008

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

Page 13: Notiuni avansate MySQL - Infoeducatie 2008

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;

Page 14: Notiuni avansate MySQL - Infoeducatie 2008

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

Page 15: Notiuni avansate MySQL - Infoeducatie 2008

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

Page 16: Notiuni avansate MySQL - Infoeducatie 2008

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

Page 17: Notiuni avansate MySQL - Infoeducatie 2008

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

Page 18: Notiuni avansate MySQL - Infoeducatie 2008

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

Page 19: Notiuni avansate MySQL - Infoeducatie 2008

Referintehttp://dev.mysql.com/doc/refman/5.0/en/Mysql workbench

Notiuni avansate MySQL

Mihai Oaida <[email protected]> 18

Page 20: Notiuni avansate MySQL - Infoeducatie 2008

Intrebari?

Notiuni avansate MySQL

Mihai Oaida <[email protected]> 19