14.06.2014 Views

Introducere in MySQL (exercitii din linia de comanda),

Introducere in MySQL (exercitii din linia de comanda),

Introducere in MySQL (exercitii din linia de comanda),

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Introducere</strong> în <strong>MySQL</strong> şi SQL<br />

Un sistem <strong>de</strong> baze <strong>de</strong> date este, în esenţă, o modalitate <strong>de</strong> a gestiona liste cu <strong>in</strong>formaţii.<br />

Informaţiile pot proveni d<strong>in</strong>tr-o varietate <strong>de</strong> surse. De exemplu, pot reprezenta date <strong>de</strong><br />

cercetare, înregistrări <strong>de</strong> afaceri, cereri ale clienţilor, statistici sportive, rapoarte <strong>de</strong> vânzări,<br />

înregistrări <strong>de</strong> personal sau notele unor elevi.<br />

De ce să optez pentru <strong>MySQL</strong>?<br />

Dacă sunteţi în căutarea unui sistem gratuit sau necostisitor <strong>de</strong> gestiune a bazelor <strong>de</strong><br />

date, puteţi alege d<strong>in</strong> mai multe opţiuni: <strong>MySQL</strong>, Microsoft SQL, PostgreSQL, ş.a.<br />

Când comparaţi <strong>MySQL</strong> cu alte sisteme <strong>de</strong> baze <strong>de</strong> date, gândiţi-vă la ceea ce este cel<br />

mai important pentru dumneavoastră şi anume: performanţă, suport, caracteristici (conforme cu<br />

SQL, extensii etc.), condiţii şi restricţii <strong>de</strong> licenţiere, preţ. Toate acestea constituie factori care<br />

trebuie luaţi în consi<strong>de</strong>rare.<br />

Date fi<strong>in</strong>d aceste consi<strong>de</strong>raţii, <strong>MySQL</strong> are <strong>de</strong> oferit numeroase caracteristici atractive:<br />

• Viteză. <strong>MySQL</strong> este rapid. Programatorii pret<strong>in</strong>d că <strong>MySQL</strong> este cel mai rapid sistem <strong>de</strong> baze<br />

<strong>de</strong> date pe care îl puteţi găsi. Puteţi verifica această afirmaţie vizitând<br />

http://www.mysql.com/why-mysql/benchmarks/ , o pag<strong>in</strong>ă <strong>de</strong> comparaţie a performanţelor d<strong>in</strong><br />

situl Web <strong>MySQL</strong>.<br />

• Uşur<strong>in</strong>ţă în utilizare. <strong>MySQL</strong> este un sistem <strong>de</strong> baze <strong>de</strong> date cu performanţe ridicate, dar<br />

relativ simplu, a cărui configurare şi adm<strong>in</strong>istrare sunt mult mai simple <strong>de</strong>cât în cazul sistemelor<br />

mai mari. Pentru <strong>in</strong>stalarea şi configurarea versiunilor <strong>de</strong> <strong>MySQL</strong> 4.0 respectiv 4.1 vă recomand<br />

să vizitaţi site-ul următor: http://www.analysisandsolutions.com/co<strong>de</strong>/mybasic.htm , în care sunt<br />

prezentaţi paşii care trebuiesc urmaţi pentru a putea configura <strong>MySQL</strong> sub W<strong>in</strong>dows 2000, XP<br />

şi NT 4.0. Sunt prezentate <strong>de</strong> asemenea tutoriale care prez<strong>in</strong>tă cum se poate face upgradarea<br />

<strong>de</strong> la <strong>MySQL</strong> 4.0 la 4.1 şi <strong>de</strong> la <strong>MySQL</strong> 4.1 la 5.0.<br />

• Cost. <strong>MySQL</strong> este gratuit pentru majoritatea utilizărilor <strong>in</strong>terne.<br />

• Suport pentru limbaje <strong>de</strong> <strong>in</strong>terogare. <strong>MySQL</strong> înţelege SQL (Structured Query Language -<br />

limbaj <strong>de</strong> <strong>in</strong>terogare structurat), limbajul preferat al tuturor sistemelor mo<strong>de</strong>rne <strong>de</strong> baze <strong>de</strong> date.<br />

De asemenea, puteţi avea acces la <strong>MySQL</strong> folos<strong>in</strong>d aplicaţii care acceptă ODBC<br />

(Open Database Connectivity), un protocol <strong>de</strong> comunicaţie cu bazele <strong>de</strong> date creat <strong>de</strong><br />

Microsoft.<br />

1


• Caracteristici. La server se pot conecta mai mulţi clienţi simultan. Clienţii pot folosi mai multe<br />

baze <strong>de</strong> date simultan. Puteţi obţ<strong>in</strong>e acces la <strong>MySQL</strong> în mod <strong>in</strong>teractiv, folos<strong>in</strong>d numeroase<br />

<strong>in</strong>terfeţe care vă permit să <strong>in</strong>troduceţi <strong>in</strong>terogări şi să vizualizaţi rezultate: clienţi în l<strong>in</strong>ie <strong>de</strong><br />

comandă, browsere Web sau clienţi X W<strong>in</strong>dow System.<br />

<strong>MySQL</strong> Control Center sau <strong>MySQL</strong>CC este o platformă <strong>in</strong><strong>de</strong>pen<strong>de</strong>ntă <strong>de</strong> adm<strong>in</strong>istrare GUI a<br />

clienţilor pentru servere <strong>de</strong> baze <strong>de</strong> date <strong>MySQL</strong>. Puteţi <strong>de</strong>scărca această <strong>in</strong>terfaţă <strong>de</strong> pe<br />

următorul site ftp: http://ftp.up.ac.za/pub/w<strong>in</strong>dows/mysql/Downloads/<strong>MySQL</strong>CC/ .<br />

Pentru a vă familiariza cât mai rapid cu această platformă vizitaţi<br />

http://newton.ncc.edu/~steve/mysqltutor/ , pag<strong>in</strong>ă în care este prezentat un tutorial al <strong>MySQL</strong><br />

Control Center într-un mod foarte concis.<br />

De asemenea, este disponibilă o varietate <strong>de</strong> <strong>in</strong>terfeţe <strong>de</strong> programare pentru limbaje<br />

precum C, Perl, Java, PHP şi Python. Astfel, aveţi opţiunea <strong>de</strong> a folosi programe client sau <strong>de</strong> a<br />

vă scrie propriile programe client pentru aplicaţii personalizate.<br />

• Conectivitate şi securitate. <strong>MySQL</strong> poate fi folosit <strong>in</strong>tegral în reţele, iar bazele <strong>de</strong> date sunt<br />

accesibile <strong>de</strong> oriun<strong>de</strong> d<strong>in</strong> Internet, <strong>de</strong>ci vă puteţi partaja datele cu oric<strong>in</strong>e, oriun<strong>de</strong>. Dar <strong>MySQL</strong><br />

are controlul accesului, astfel încât persoanele care nu au dreptul să vă citească datele nu vor<br />

avea această posibilitate.<br />

• Portabilitate. <strong>MySQL</strong> rulează pe numeroase varietăţi <strong>de</strong> UNIX, precum şi pe alte sisteme non-<br />

UNIX, ca W<strong>in</strong>dows şi OS/2. O bună parte d<strong>in</strong> programarea cu <strong>MySQL</strong> are loc pe sisteme L<strong>in</strong>ux<br />

ieft<strong>in</strong>e. <strong>MySQL</strong> rulează pe diverse echipamente <strong>de</strong> la calculatoare <strong>de</strong> birou la servere cu<br />

performanţe ridicate.<br />

• Distribuţie liberă. <strong>MySQL</strong> nu este un proiect Open Source, <strong>de</strong>oarece este necesară o licenţă în<br />

anumite condiţii. Totuşi, <strong>MySQL</strong> se bucură <strong>de</strong> o amplă popularitate în comunitatea Open<br />

Source, <strong>de</strong>oarece termenii <strong>de</strong> licenţă nu sunt foarte restrictivi, (în esenţă, <strong>MySQL</strong> este în<br />

general gratuit, dacă nu doriţi să obţ<strong>in</strong>eţi profit pr<strong>in</strong> vânzarea sistemului sau a unor servicii care<br />

necesită utilizarea acestuia).<br />

Alegerea sistemului <strong>de</strong> operare pentru <strong>de</strong>zvoltarea bazei <strong>de</strong> date vă aparţ<strong>in</strong>e. Eu vă<br />

recomand să folosiţi <strong>MySQL</strong> si celelalte <strong>in</strong>strumente sub L<strong>in</strong>ux.<br />

Toate <strong>in</strong>strumentele îşi au orig<strong>in</strong>ea în UNIX si <strong>de</strong> acolo au fost portate ulterior spre<br />

W<strong>in</strong>dows, fi<strong>in</strong>d <strong>de</strong>sfăşurate mai frecvent în L<strong>in</strong>ux <strong>de</strong>cât în W<strong>in</strong>dows. Aceasta înseamnă că<br />

versiunile W<strong>in</strong>dows au avut o perioadă <strong>de</strong> maturizare mai scurtă şi că nu au fost testate şi utilizate<br />

atât <strong>de</strong> aprofundat ca versiunile sub L<strong>in</strong>ux.<br />

2


Crearea şI utilizarea bazelor <strong>de</strong> date în <strong>MySQL</strong><br />

..:: exerciţii d<strong>in</strong> l<strong>in</strong>ia <strong>de</strong> comandă ::..<br />

Acest material constituie o <strong>in</strong>troducere în sistemul <strong>de</strong> gestiune a bazelor <strong>de</strong> date<br />

relaţionale (SGBDR) <strong>MySQL</strong> şi în limbajul <strong>de</strong> <strong>in</strong>terogare structurat SQL pe care îl înţelege<br />

sistemul <strong>MySQL</strong>. Pe lângă termenii şi conceptele fundamentale pe care trebuie să le înţelegeţi<br />

vă vom prezenta şi modul <strong>de</strong> utilizare a sistemului <strong>MySQL</strong> pentru a crea o bază <strong>de</strong> date şi<br />

pentru a <strong>in</strong>teracţiona cu aceasta. De asemenea vă vom pune la dispoziţie şi o bază <strong>de</strong> date<br />

<strong>de</strong>monstrativă pe care o veţi putea folosi în exemplele următoare.<br />

Să consi<strong>de</strong>răm situaţia în care c<strong>in</strong>eva v-ar solicita să realizaţi un magaz<strong>in</strong> on-l<strong>in</strong>e,<br />

probabil l-aţi ruga să vă ofere date <strong>de</strong>spre produsele sale iar voi aţi încerca să realizaţi un<br />

<strong>de</strong>sign bun şi să gasiţi o formă <strong>de</strong> a-i prezenta produsele cât mai atractiv cu put<strong>in</strong>ţă.<br />

Când e vorba <strong>de</strong> zeci <strong>de</strong> produse nu ar fi o problemă aşa mare, dar dacă se pune<br />

problema unui număr <strong>de</strong> câteva sute <strong>de</strong> produse? Ar trebui să luaţi <strong>de</strong> pe serverul un<strong>de</strong> se află<br />

hostat site-ul (asta dacă nu aveţi <strong>de</strong>ja o copie a site-ului pe calculator), să o modificaţi şi să-l<br />

puneţi d<strong>in</strong> nou pe server. Probabil că fiecare produs va avea propria pag<strong>in</strong>ă cu <strong>de</strong>scriere şi<br />

probabil caracteristici. Vă puteţi închipui ce înseamnă să păstrezi "up to date" un astfel <strong>de</strong> site?<br />

Sisif s-ar fi consi<strong>de</strong>rat probabil norocos! Probabil că d<strong>in</strong> acest exemplu aţi înţeles cât <strong>de</strong><br />

importantă este o bază <strong>de</strong> date.<br />

Vom porni <strong>de</strong> la un caz concret şi anume crearea şi întreţ<strong>in</strong>erea unui site cu anunţuri<br />

on-l<strong>in</strong>e. În mod normal c<strong>in</strong>eva care trebuie să <strong>de</strong>a un anunţ vă va trimite un e-mail cu anunţul iar<br />

voi veţi fi nevoiţi să modificaţi pag<strong>in</strong>a html în care sunt cupr<strong>in</strong>se acestea şi apoi o veţi pune pe<br />

server. Şi asta pentru fiecare anunţ în parte. Lucrurile vor <strong>de</strong>veni <strong>de</strong>stul <strong>de</strong> dificile atunci când<br />

veţi avea <strong>de</strong> publicat câteva zeci <strong>de</strong> mesaje pe zi. Şi cu siguranţă, mai <strong>de</strong>vreme sau mai târziu<br />

veţi "eşua" pr<strong>in</strong> a folosi o bază <strong>de</strong> date.<br />

Dar ce este până la urmă o bază <strong>de</strong> date? O bază <strong>de</strong> date (în cazul nostru <strong>MySQL</strong>) este<br />

un program ce poate stoca o cantitate foarte mare <strong>de</strong> <strong>in</strong>formaţii şi o poate organiza într-un<br />

format ce este uşor accesibil în mod direct sau <strong>de</strong> către un alt program, <strong>de</strong> exemplu PHP.<br />

O bază <strong>de</strong> date este formată d<strong>in</strong> unul sau mai multe tabele. Un tabel este un fişier<br />

structurat ce stochează date <strong>de</strong> un anumit tip: o listă <strong>de</strong> cumpărături, un catalog <strong>de</strong> produse, o<br />

listă <strong>de</strong> anunţuri, etc.<br />

În cazul nostru vom începe cu un s<strong>in</strong>gur tabel pe care o să-l numim anunturi. Aşa după<br />

cum îi spune şi numele avem <strong>de</strong> fapt o tabelă ce conţ<strong>in</strong>e <strong>in</strong>formaţii. Fiecare coloană conţ<strong>in</strong>e un<br />

anumit tip <strong>de</strong> <strong>in</strong>formaţii iar fiecare l<strong>in</strong>ie conţ<strong>in</strong>e un set <strong>de</strong> astfel <strong>de</strong> <strong>in</strong>formaţii. Un set <strong>de</strong> <strong>in</strong>formaţii<br />

stocat <strong>de</strong>-a lungul unei l<strong>in</strong>ii poartă numele <strong>de</strong> înregistrare. Un anunţ reprez<strong>in</strong>tă un astfel <strong>de</strong><br />

rând.<br />

3


L<strong>in</strong>iile şi coloanele unei tabele pot conţ<strong>in</strong>e <strong>in</strong>formaţii referitoare la vânzarea sau<br />

cumpărarea unor produse, închirieri, etc.:<br />

L<strong>in</strong>ia – 1<br />

L<strong>in</strong>ia - 2<br />

L<strong>in</strong>ia – 3<br />

Coloana 1<br />

|<br />

Coloana 2<br />

|<br />

Coloana 3<br />

|<br />

Id text_anunt data_anunt<br />

1 vand notebook HP … 2005-07-20<br />

2 <strong>in</strong>chiriez spatiu comercial … 2005-03-04<br />

3 cumpar apartament … 2005-01-26<br />

Se observă că tabelul nostru are o coloană ce conţ<strong>in</strong>e anunţul propriu-zis ("text_anunt"),<br />

o altă coloană conţ<strong>in</strong>e data la care a apărut ("data_anunt") şi nu în ultimul rând o coloană (“id”)<br />

Probabil o sa vă puneţi <strong>in</strong>trebarea care este rostul coloanei "id" ?<br />

Răspunsul este unul foarte simplu. O proiectare bună a unei baze <strong>de</strong> date presupune ca<br />

un anumit anunţ să fie <strong>in</strong><strong>de</strong>ntificat unic. În viaţa <strong>de</strong> zi cu zi daca c<strong>in</strong>eva ne-ar ruga să i<strong>de</strong>ntificăm<br />

un anunţ i-am spune probabil că e acela cu "<strong>in</strong>chiriez spatiu comercial ...". Dar pentru o bază <strong>de</strong><br />

date e un pic mai complicat să i<strong>de</strong>ntifice în mod unic un astfel <strong>de</strong> anunţ d<strong>in</strong> sute <strong>de</strong> anunţuri <strong>de</strong><br />

acest gen şi atunci folosim o coloană ce conţ<strong>in</strong>e un număr unic. Astfel e mai simplu sa aflam că<br />

<strong>de</strong> fapt anunţul care ne <strong>in</strong>teresează e anunţul 2 (id=2).<br />

Crearea unei baze <strong>de</strong> date<br />

Hai<strong>de</strong>ţi sa creăm o astfel <strong>de</strong> bază <strong>de</strong> date (presupunem că <strong>de</strong>ja aţi <strong>in</strong>stalat şi configurat<br />

<strong>MySQL</strong> şi puteţi să folosiţi l<strong>in</strong>ia <strong>de</strong> comandă SQL, mysql> ).<br />

După cum se observă este foarte simplu să creaţi o bază <strong>de</strong> date:<br />

mysql> CREATE DATABASE anunturi_onl<strong>in</strong>e;<br />

Query OK, 1 row affected (0.05 sec)<br />

Am ales numele anunturi_onl<strong>in</strong>e pentru baza noastră <strong>de</strong> date. Puteţi alege orice nume.<br />

Acum că am creat baza <strong>de</strong> date trebuie sa-i spunem serverului (în cazul nostru serverul<br />

<strong>MySQL</strong>) că vrem să folosim această bază <strong>de</strong> date:<br />

mysql> USE anunturi_onl<strong>in</strong>e;<br />

Database changed<br />

mysql><br />

Dacă doriţi să ştergeţi o bază <strong>de</strong> date puteţi utiliza:<br />

mysql> DROP DATABASE nume_baza_<strong>de</strong>_date;<br />

4


Crearea unei tabel<br />

Crearea unei tabel este un lucru ceva mai complicat, pentru că în tabele sunt <strong>de</strong> fapt<br />

stocate <strong>in</strong>formaţiile. Dacă veţi citi manualul <strong>de</strong> <strong>MySQL</strong> veţi <strong>de</strong>scoperi o <strong>de</strong>f<strong>in</strong>iţie ce la prima<br />

ve<strong>de</strong>re pare criptică:<br />

mysql>CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name<br />

[(create_<strong>de</strong>f<strong>in</strong>ition,...)] [table_options] [select_statement]<br />

sau<br />

mysql> CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name<br />

[(] LIKE old_tbl_name [)];<br />

Să luăm un exemplu concret şi să ve<strong>de</strong>m cum creăm tabela noastră cu anunţurI:<br />

mysql> CREATE TABLE anunturi (<br />

-> id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,<br />

-> text_anunt TEXT,<br />

-> data_anunt DATE NOT NULL<br />

-> );<br />

Query OK, 0 rows affected (0.08 sec)<br />

Pare complicat? Hai<strong>de</strong>ţi să ve<strong>de</strong>m ce reprez<strong>in</strong>tă fiecare l<strong>in</strong>ie:<br />

• prima l<strong>in</strong>ie pare <strong>de</strong>stul <strong>de</strong> simplă. dacă ştiţi ceva engleză e suficient să traduceţi şi veţi ve<strong>de</strong>a<br />

că i se transmite serverului <strong>MySQL</strong> faptul că se doreşte crearea unui tabel.<br />

• a doua l<strong>in</strong>ie e în schimb ceva mai complicată. Să o luăm pe rând. Această l<strong>in</strong>ie comunică<br />

serverului <strong>MySQL</strong> că dorim să creăm o coloană cu numele "id" <strong>de</strong> timp întreg ("INT") ce se va<br />

auto <strong>in</strong>crementa ("AUTO_INCREMENT") şi <strong>in</strong>formaţiile conţ<strong>in</strong>ute în această coloană vor fi unice<br />

("PRIMAY KEY").<br />

V-am explicat anterior faptul că o baza <strong>de</strong> date b<strong>in</strong>e proiectată trebuie să aibă un mod<br />

<strong>de</strong> a <strong>in</strong><strong>de</strong>ntifica în mod unic o înregistrare (l<strong>in</strong>ie).<br />

• a treia l<strong>in</strong>ie îi comunică serverului <strong>MySQL</strong> că dorim să creăm o coloană cu numele<br />

"text_anunt" <strong>de</strong> tip "TEXT".<br />

• a patra l<strong>in</strong>ie îi comunică serverului <strong>MySQL</strong> că dorim să creăm o coloana cu numele<br />

"data_anunt" <strong>de</strong> tip "DATE" şi mai mult <strong>de</strong>cât atât impunem condiţia ca tot<strong>de</strong>auna să existe<br />

<strong>in</strong>formaţii în acest câmp (să nu fie niciodată gol, “NOT NULL”).<br />

5


Re<strong>comanda</strong>rea mea este să consultaţi manualul <strong>MySQL</strong> (îl veţi găsi în fol<strong>de</strong>rul un<strong>de</strong> aţi<br />

<strong>in</strong>stalat <strong>MySQL</strong>, subfol<strong>de</strong>rul "Doc") pentru a afla mai multe <strong>de</strong>spre tipuirle <strong>de</strong> date atunci când<br />

creaţi o tabelă.<br />

Verificaţi existenţa tabelei <strong>in</strong>troducând <strong>de</strong> la prompter <strong>comanda</strong>:<br />

mysql> SHOW TABLES;<br />

+---------------------------+<br />

| Tables_<strong>in</strong>_anunturi_onl<strong>in</strong>e |<br />

+---------------------------+<br />

| anunturi |<br />

+---------------------------+<br />

1 row <strong>in</strong> set (0.07 sec)<br />

Dacă doriţi să afişaţi câmpurile (coloanele) tabelei puteţi utiliza <strong>comanda</strong>:<br />

mysql> SHOW COLUMNS FROM anunturi;<br />

+------------+---------+------+-----+------------+----------------+<br />

| Field | Type | Null | Key | Default | Extra |<br />

+------------+---------+------+-----+------------+----------------+<br />

| id | <strong>in</strong>t(11) | | PRI | NULL | auto_<strong>in</strong>crement |<br />

| text_anunt | text | YES | | NULL | |<br />

| data_anunt | date | | | 0000-00-00 | |<br />

+------------+---------+------+-----+------------+----------------+<br />

3 rows <strong>in</strong> set (0.01 sec)<br />

Dacă doriţi să ştergeţi o tabelă puteţi utiliza <strong>comanda</strong>:<br />

mysql> DROP TABLE nume_tabel;<br />

<strong>Introducere</strong>a <strong>de</strong> date într-un tabel<br />

Acum am creat baza <strong>de</strong> date şi tabela dar ea este încă goală (nepopulată). Nu am<br />

<strong>in</strong>trodus nici o <strong>in</strong>formaţie. Exista două modalităţi <strong>de</strong> a <strong>in</strong>troduce <strong>in</strong>formaţii în baza <strong>de</strong> date.<br />

Folosiţi-o pe cea care vi se pare cea mai simplă:<br />

mysql> INSERT INTO anunturi SET<br />

-> text_anunt = "vand notebook HP Pavilion zd8000. Tel. 0721-525161",<br />

-> data_anunt = "2005-07-20";<br />

Query OK, 1 row affected (0.04 sec)<br />

sau:<br />

mysql> INSERT INTO anunturi<br />

-> (text_anunt, data_anunt) VALUES(<br />

-> "<strong>in</strong>chiriez spatiu comercial, ultracentral.Tel.0744-824224", "2005-03-04");<br />

Query OK, 1 row affected (0.00 sec)<br />

6


Pentru cea <strong>de</strong>-a treia înregistrare rămâne la latitud<strong>in</strong>ea dumneavoastră pe care d<strong>in</strong> cele<br />

două modalităţi <strong>de</strong> <strong>in</strong>troducere a datelor o veţi folosi.<br />

Reţ<strong>in</strong>eţi că ambele variante sunt absolut echivalente. Observaţi că în nici una d<strong>in</strong><br />

variante nu am am<strong>in</strong>tit nimic <strong>de</strong> câmpul "id". De ce? Pentru că <strong>in</strong>iţial (când am creat tabela) am<br />

pus condiţia ca acest câmp să fie AUTO_INCREMENT, iar la fiecare <strong>in</strong>serare a unei noi<br />

înregistrări, <strong>MySQL</strong> va avea grijă să <strong>in</strong>crementeze cu 1 valoarea prece<strong>de</strong>ntă şi să o adauge<br />

automat în tabelă.<br />

Vizualizarea datelor stocate<br />

Vom încerca să obţ<strong>in</strong>em <strong>de</strong> la <strong>MySQL</strong> <strong>in</strong>formaţiile stocate. Dacă dorim să obţ<strong>in</strong>em toate<br />

<strong>in</strong>formaţiile d<strong>in</strong> baza nostră <strong>de</strong> date vom folosi:<br />

mysql> SELECT * FROM anunturi;<br />

+----+----------------------------------------------------------+------------+<br />

| id | text_anunt | data_anunt |<br />

+----+----------------------------------------------------------+------------+<br />

| 1 | vand notebook HP Pavilion zd8000. Tel. 0721-525161 | 2005-07-20 |<br />

| 2 | <strong>in</strong>chiriez spatiu comercial, ultracentral.Tel.0744-824224 | 2005-03-04 |<br />

| 3 | cumpar apartament, zona centrala. Tel.0788-293949 | 2005-01-26 |<br />

+----+----------------------------------------------------------+------------+<br />

3 rows <strong>in</strong> set (0.00 sec)<br />

În acest caz * se traduce pr<strong>in</strong> "toate".<br />

Dacă în schimb dorim să aflăm numai anunţurile folosim:<br />

mysql> SELECT text_anunt FROM anunturi;<br />

+----------------------------------------------------------+<br />

| text_anunt |<br />

+----------------------------------------------------------+<br />

| vand notebook HP Pavilion zd8000. Tel.0721-525161 |<br />

| <strong>in</strong>chiriez spatiu comercial, ultracentral.Tel.0744-824224 |<br />

| cumpar apartament, zona centrala. Tel.0788-293949 |<br />

+----------------------------------------------------------+<br />

3 rows <strong>in</strong> set (0.00 sec)<br />

Sau dacă dorim să aflăm anunţul şi data când a fost publicat folosim:<br />

mysql> SELECT text_anunt, data_anunt FROM anunturi;<br />

+----------------------------------------------------------+------------+<br />

| text_anunt | data_anunt |<br />

+----------------------------------------------------------+------------+<br />

| vand notebook HP Pavilion zd8000. Tel.0721-525161 | 2005-07-20 |<br />

| <strong>in</strong>chiriez spatiu comercial, ultracentral.Tel.0744-824224 | 2005-03-04 |<br />

| cumpar apartament, zona centrala. Tel.0788-293949 | 2005-01-26 |<br />

+----------------------------------------------------------+------------+<br />

3 rows <strong>in</strong> set (0.00 sec)<br />

Dar dacă vrem să aflăm câte anunţuri au fost publicate <strong>de</strong> exemplu în data <strong>de</strong> 4 martie 2005?<br />

mysql> SELECT COUNT(*) FROM anunturi WHERE data_anunt="2005-03-04";<br />

+----------+<br />

| COUNT(*) |<br />

+----------+<br />

| 1 |<br />

+----------+<br />

1 row <strong>in</strong> set (0.02 sec)<br />

Dar dacă vrem să aflăm toate anunţurile <strong>de</strong>spre notebook-uri?<br />

mysql> SELECT text_anunt, data_anunt FROM anunturi WHERE text_anunt LIKE<br />

'%notebook%';<br />

+--------------------------------------------------+------------+<br />

| text_anunt | data_anunt |<br />

+--------------------------------------------------+------------+<br />

| vand notebook HP Pavilion zd8000.Tel.0721-525161 | 2005-07-20 |<br />

+--------------------------------------------------+------------+<br />

1 row <strong>in</strong> set (0.00 sec)<br />

Sfatul meu e să încercaţi să exersaţi cât mai mult astfel <strong>de</strong> <strong>in</strong>terogări (query) către baza <strong>de</strong><br />

date.<br />

7


Modificarea datelor stocate<br />

La un moment dat va fi nevoie să modificăm datele stocate. Acum veţi înţelege utilitatea<br />

câmpului "id". Să presupunem că vrem să modificăm anunţul cu notebook-ul şi să îi adăugăm<br />

preţul:<br />

mysql> UPDATE anunturi SET text_anunt = " vand notebook HP Pavilion zd8000.<br />

Pret 1000 RON. Tel.0721-525161" WHERE id = 1;<br />

Query OK, 1 row affected (0.01 sec)<br />

Rows matched: 1 Changed: 1 Warn<strong>in</strong>gs: 0<br />

Puteţi observa că am modificat rândul ce are id=1. Dacă acest câmp nu ar fi existat<br />

această modificare ar fi fost un pic mai dificilă pentru că ar fi fost <strong>de</strong>stul <strong>de</strong> greu să-i comunicăm<br />

serverului <strong>MySQL</strong> ce rând vrem <strong>de</strong> fapt să modificăm.<br />

Adăugarea unui câmp nou<br />

Vom adăuga un câmp nou, data_exp_anunt, câmp în care va fi trecută data la care va<br />

expira acel anunţ. Se va utiliza <strong>comanda</strong>:<br />

mysql> ALTER TABLE anunturi ADD COLUMN data_exp_anunt DATE NOT NULL;<br />

Query OK, 3 rows affected (0.09 sec)<br />

Records: 3 Duplicates: 0 Warn<strong>in</strong>gs: 0<br />

Verificăm adăugarea noului câmp:<br />

mysql> show columns from anunturi;<br />

+----------------+---------+------+-----+------------+----------------+<br />

| Field | Type | Null | Key | Default | Extra |<br />

+----------------+---------+------+-----+------------+----------------+<br />

| id | <strong>in</strong>t(11) | | PRI | NULL | auto_<strong>in</strong>crement |<br />

| text_anunt | text | YES | | NULL | |<br />

| data_anunt | date | | | 0000-00-00 | |<br />

| data_exp_anunt | date | | | 0000-00-00 | |<br />

+----------------+---------+------+-----+------------+----------------+<br />

4 rows <strong>in</strong> set (0.00 sec)<br />

Ştergerea datelor stocate<br />

Utilitatea câmpului "id" se va ve<strong>de</strong>a şi atunci când vom dori să ştergem o înregistrare.<br />

După câmpul "id" vom <strong>in</strong><strong>de</strong>ntifica în mod unic înregistrarea pe care vrem să o ştergem, astfel:<br />

mysql> DELETE FROM anunturi WHERE id = 1;<br />

Query OK, 1 row affected (0.01 sec)<br />

Ştergerea unui tabel<br />

Pentru ştergerea tabelului anunturi se foloseşte <strong>comanda</strong>:<br />

mysql> DROP TABLE anunturi;<br />

Ştergerea unei baze <strong>de</strong> date<br />

Dacă doriţi să ştergeţi şi baza <strong>de</strong> date puteţi utiliza <strong>comanda</strong>:<br />

mysql> DROP DATABASE anunturi_onl<strong>in</strong>e;<br />

Observaţii:<br />

Pentru a afla <strong>in</strong>formaţii <strong>de</strong>spre o anumită comandă tastaţi HELP urmat <strong>de</strong> numele<br />

comenzii. De exemplu:<br />

mysql> HELP DELETE;<br />

Informaţii <strong>de</strong>spre topic-urile disponibile se pot obţ<strong>in</strong>e tastând <strong>de</strong> la prompterul <strong>MySQL</strong> <strong>comanda</strong><br />

HELP CONTENTS.<br />

TEMĂ: Creați și populați baza <strong>de</strong> date anunțuri_onl<strong>in</strong>e utilizând managerul onl<strong>in</strong>e <strong>de</strong> baze <strong>de</strong><br />

date phpMyAdm<strong>in</strong>.<br />

8

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!