You are on page 1of 44

Leksion 8

MySQL
Database: SQL
MySQL
 MySQL (http://www.mysql.com) eshte nje server databaze i
fuqishem, zhvilluar dhe mirembajtur nga T.c.X DataKonsultAB,
Stockholm, Sweden.

 Nga1995, MySQL eshte bere nje nga server-at me popullore ne


bote, kjo fale shpejtesise se server-it, fuqise dhe politikave fleksibel
te liçences.

 MySQL eshte kompatibel pothuajse me çdo sistem shfrytezimi,


duke perfshire : FreeBSD, Solaris, UNIX, Linux, Windows.

 Karakteristikat e MySQL-se, se bashku me nje bashkesi te madhe


funksionesh lehtesisht te perdorshme, e bejne MySQL-ne
databazen me popullore, plotesuese te PHP-se.
Pse MySQL?

 MySQL eshte i pershtatshem ne menyre te veçante ne


aplikacione web.
 MySQL eshte falas.
 Mund ta instaloni dhe ta perdorni pa paguar asgje.

 MySQL eshte i shpejte dhe i fuqishem.


 Per baza te dhenash te vogla dhe mesatare, MySQL eshte
jashtezakonisht i shpejte.
 MySQL permiresohet gjate gjithe kohes.
 Zhvilluesit e rifreskojne shpesh, duke i shtuar veçori.
Komanda create database
 Sintaksa e pergjithshme eshte:

create database database_name

 Pasi ekzekutohet kjo komande, MySQL krijon nje direktori


ne te cilen ruan te gjithe skedaret qe nevojiten per bazen e
te dhenave. PSh: /var/lib/mysql/.
Komanda create table

 Sintaksa

create table emertabele


(
column_1 column_type column attributes,
column_2 column_type column attributes,
primary key (column_name),
index index_name(column_name)
)
Disa atribute
 null | not null
 Lejon ose ndalon qe nje kolone te mos permbaje vlera

 default
 Percakton nje vlere qe merr nje kolone nese ne e leme bosh
kur futim nje rresht ne tabele

 auto_increment
 Vete_rrites – e vendos ne menyre automatike vleren e nje kolone te
tipit int duke rritur me nje, vleren me te madhe qe ka rreshti paraardhes
Psh nese i fundit ka qene 7 , vlera e re qe do te merret automatikisht do te jete 8(7+1)
 Nese e fshijme nje rresht , id e tij nuk perdoret me , nuk i jepet nje
rreshti tjeter.
 Kjo mundeson identifikimin unik te rreshtave kur behet fjale per çelesin
primar
Shembull
create table topics2 (
topic_id integer not null auto_increment,
parent_id integer default 0 not null,
root_id integer default 0,
name varchar(255),
description text null,
create_dt timestamp,
modify_dt timestamp,
author varchar(255) null,
author_host varchar(255) null,
primary key(topic_id),
index my_index(parent_id)
)
Vlera Boshe - NULL

 NULL – asgje, vlere

 Per te kontrolluar nese nje vlere e nje kolone te


caktuar eshte boshe (pra nuk ka vlere) perdoret
operatori isnull
 Shembuj:
 select * from names where isnull(middle_name);
 select * from names where !isnull(middle_name);
 select * from users were addr2 is null;
 select * from users where addr2 is not null;
Tipet e kolonave
 Tip tekst
 Char(n) (n<=255)

 Fjale me gjatesi fikse me n shkrojna/numra


 Pra nese vlera e dhene eshte me gjatesi me te vogel se n atehere stringu
do te plotesohet me hapesira ne te djathte derisa te arrije gjatesine n.

 Psh: nese kolona eshte percaktuar si char(10) dhe duam te ruajme vleren
“happy”, MySQL do te ruaje “happy” dhe 5 hapesira. Hapesirat hiqen nga
rezultati kur merret vlera nga tabela.
 Shembull nr_amzes , Nr_targes te cileve i dihet numri i shkronjave

 Varchar(n) (n<=255)
 Fjale me gjatesi variabel 0 deri ne n shkronja
 Ne ndryshim nga char, ketu vleres nuk i shtohen hapesira, por MySQL
shton nje karakter per çdo fushe varchar, i cili ruan gjatesine e fushes.
MySQL heq hapesirat nga fundi i stringjeve ne fusha te tipit varchar
Tipet Tekst
Te gjithe tipet e meposhtme kane gjatesi variabel si ne rastin e varchar(n)
Ndryshojne nga njeri-tjetri nga gjatesia maksimale e tekstit qe mund te mbajne

 TINYTEXT
 Gjatesia maksimale eshte 255 karaktere

 TEXT
 Gjatesia maksimale eshte 65,535 karaktere

 MEDIUMTEXT
 Gjatesia maksimale 16,777,215 karaktere

 LONGTEXT
 Gjatesia maksimale 4,294,967,295 karaktere
 Ky tip nuk perdoret shume pasi gjatesia maksimale e stringut qe lejon MySQL eshte vetem 16
milion byte
ENUM
 Perdorimi :
enum (‘value1’, ‘value2’, ‘value3’ ...) [default
‘value’]

 Mund te kufizohet numri i vlerave qe mund te marre nje kolone .


 Lejon deri 65535

 Psh nese duam qe nje kolone e caktuar te marre vetem dy


vlera te mundshme po dhe jo

create table my_table (


id int auto_increment primary key,
Pyetje varchar(200),
Pergjigje enum (‘po’, ‘jo’) default ‘po’);
Tipet numerike

MySQL ka shtate tipe te dhenash (kolonash) per numrat:


 int/integer
 tinyint
 mediumint
 bigint
 float
 double/double precision/real
 decimal/numeric

 Dallojne nga njeri-tjetri ne madhesi


Tipet per daten dhe kohen
 date
 time
 datetime
 year
 timestamp
Tipet per kohen jane fleksibel, dhe pranojne stringje psh nese krijojme nje tabele
create table date_test(
id int unsigned auto_increment,
a_date date );
 Komandat e meposhtme interpertohen sakte nga mysql:
 insert into date_test (a_date) values (‘00-06-01’);
 insert into date_test (a_date) values (‘2000-06-01’);
 insert into date_test (a_date) values (‘20000601’);
 insert into date_test (a_date) values (000601);
Tipet e te dhenave per datat
 DATE
 Perdorimi : date
 Te dhenat ruhen ne formatin YYYY-MM-DD.
 Lejon vlera nga 1000-01-01 deri ne 9999-12-31.
 DATETIME
 Perdorimi: datetime
 Ruan te dhenat ne formatin:YYYY-MM-DD HH:MM:SS.
 Lejon vlera nga 1000-01-01 00:00:00 ne 9999-12-31 23:59:59.
 TIMESTAMP
 Perdorimi: timestamp(size)
 Eshte shume i dobishem sepse ruan ne menyre automatike kohen kur
rreshti u modifikua
Tipe per datat
 TIME
 Perdorimi: time
 Ruan kohen ne formatin HH:MM:SS dhe lejon vlera nga –838:59:59 ne
838:59:59.
 Arsyeja e vlerave te medha qendron tek fakti qe tipi i te dhenave time mund te
perdoret per te ruajtur rezultatet e veprimeve matematike me kohen

 YEAR
 Perdorim : year[(2|4)]

 Ne formatin me dy shifra, datat e lejuara jane ndermjet 1970 dhe 2069.


Shifrat 70-99 paraprihen nga 19 dhe 01–69 paraprihen nga 20.

 Rekomandohet perdorimi i formatit me kater shifra.


Lejon vlera nga 1901 ne 2155.
Indekset

 Indekset perdoren per te patur akses me te shpejte ne


informacionet specifike te nje tabele ne bazen e te dhenave.
 Nje indeks eshte nje strukture qe rendit vlerat sipas nje ose me
shume kolonave ne nje tabele.
 Psh: Kolona Mbiemri ne tabele Punonjesit.
 Nese po kerkoni nje punetor sipas mbiemrit te tij, indekset ju ndihmojne qe te
merrni informacionin me shpjete sesa te kontrollonit ne te gjithe rreshtat e
tabeles.
 Indeksi siguron shenjuesa per ne vlerat e te dhenave te ruajtura
ne kolona te caktuara te tabeles, dhe i rendit keto shenjuesa
sipas rendit te percaktuar prej jush.
Indekset
 Sintaksa
index emer_indeksi (kolona_e_indeksuar)
 Nje menyre tjeter per te krijuar nje index eshte qe te deklarohet nje kolone
si nje çeles primar.
 Vereni qe çdo kolone auto_increment duhet te indeksohet.
create table my_table
( id_col int unsigned auto_increment primary key,
another_col text );
 Ose ndryshe
create table my_table (
id_col int unsigned not null auto_increment,
another_col text,
primary key(id_col) );
Indekset

 Indekset mund te perfshijne me shume se nje kolone.


 Nese nje query perdor keto dy kolona se bashku per kerkim, duhet te
krijoni nje indeks qe i perfshin te dyja:

create table mytable


(
id_col int unsigned not null,
another_col char(200) not null,
index dual_col_index(id_col, another_col)
);
Indekset
 Per kolonat char dhe varchar, mund te krijohen indekse per nje pjese ne
fillim te kolones :
index index_name (column_name(column_length))

 Shembull:
create table my_table (
char_column char (255) not null,
text_column text not null,
index index_on_char (char_column(20)),
index index_on_text (text_column(200))
);
 Nje indeks mund te siguroje qe te ekzistojne vlera unike ne çdo rresht ne
nje tabele duke perdorur kufizimin “unique”.
create table my_table(
char_column char (255) not null,
text_column text not null,
unique index index_on_char (char_column) );
Komanda Insert

insert into table_name (column_1, column2, column3,...)


values (value1, value2, value3 ...)

 Nese nje kolone lejon vlera Null ath ju mund te mos e vendosni
ate ne komanden insert
INSERT Sintaksa

 Stringjet duhet te vendosen brenda thonjezave teke (‘).

shembull
insert into table_name (text_col, int_col) values (‘hello world’, 1)
Escape characters
 Disa karaktere te veçanta mund te perdoren si vlera ne nje kolone duke i paraprire
me backslash \
 ‘ (single quote)
 “ (double quote)
 \ (backslash)
 % (percent sign)
 _ (underscore)

 Per escape per thonjezat teke mund te perdorim edhe dy thonjeza teke njera pas
tjetres (‘’) .
 Keto karaktere identifikohen ne MySQL nga sekuenca e tyre escape:
 \n (newline)
 \t (tab)
 \r (carriage return)
 \b (back space)
Komanda update

 Sintaksa
update table_name
set col_1=value1, col_2=value_2
where col=value

Shembull:
update folks set fname=’Vito’ where id=2

update folks set salary=50000 where salary<50,000


Komanda select e thjeshte

 Select [lista e kolonave te ndara me presje] from [


emri_tabeles]
where kusht_logjik
order by [liste e kolonave]

select column_1, column_2, column_3 from table_name


ose
select * from table_name
Komanda select me funksionet e grupit

Select [lista e kolonave te ndara me presje te grupuara],


[funksion_grupi]

from [ emri_tabeles]

where [ kusht_logjik]

Group by [lista e kolonave te ndara me presje te grupuara]

Having [kusht_logjik]
Shembuj select i thjeshte

Select * from studentet

Select id, emri, mbiemri from studentet where datelindja is null

select * from users where city = ‘San Francisco’


Shembuj select i perbere
 Nga tabela studentet afishoni per secilin nga emrat sa
here perseritet
Select emri, count(*) ‘here’ from studentet
Group by emri
 Nga tabela studentet afishoni te gjithe ata studente qe
kane emer , mbiemer te njejte
Select emri, mbiemri, count(*) ‘here’
from studentet
group by emri, mbiemri
having count(*)>1
Operatoret e krahasimit ne MySQL

Operator Definition
= equal to
<> or != not equal to
< less than
<= less than or equal to
> greater than
>= greater than or equal to
Like Compares a string
Komanda drop
drop table/drop database
 Per te fshire nje tabele ose te gjithe bazen e te dhenave
perdoret komanda drop.

 Kujdes! Nese e fshini nje baze te dhenash do te


humbasin te gjithe tabelat qe ekzistojne ne te.

drop table table_name

drop database database_name


Marrja e te dhenave nga disa tabela

 Skema e bazes se te dhenave Book-O-Rama


Marrja e te dhenave nga disa tabela
Gjetja e rreshtave qe nuk kombinojne
 Shpesh na nevojitet te gjejme rreshtat ne te cilat dy tabelat nuk
lidhen, (pra qe nuk kombinojne),
 psh: te gjejme klientet qe nuk kane bere porosi, apo librat qe nuk jane
porositur.
 Menyra me e lehte per kete eshte qe te perdoret nje left join, i
cili bashkon te dhenat e dy tabelave, duke patur nje kusht te
caktuar, dhe nese nuk gjendet nje rresht korrespondues ne tabelen
djathtas, ne tabelen rezultat do te shtohet nje rresht qe permban
vlera NULL ne kolonat e djathta.
Gjetja e rreshtave qe nuk kombinojne

 Rezultati i kesaj query mund te jete:


Gjetja e rreshtave qe nuk kombinojne
 Per te gjetur klientet qe nuk kane bere porosi:

 Mund te vereni qe ne kete shembull eshte perdorur nje sintakse tjeter per
kushtin join. Eshte perdorur sintakse me USING, ne vend te ON.
 Perdorimi i USING nuk e specifikon tabelen nga e cila vjen atributi i join, per kete
arsye kolonat ne te dy tabelat duhet te kene te njejtin emer nese deshironi te
perdorni USING.
Perdorimi i emrave te tjere per tabelat: Pseudonimet
(Aliases )

 Shpesh eshte me praktike qe t’i referohemi tabelave me emra te tjere.


 Emrat e tjere per tabelat quhen Pseudonime (alias)
Perdorimi i emrave te tjere per tabelat: Pseudonimet
(Aliases )

 Eshte e nevojshme te perdoren pseudonimet, kur duam te


bashkojme (join) nje tabele me vetveten.
 Kjo eshte e nevojshme psh. nese duam te gjejme rreshtat e nje tabele qe
kane vlera te perbashketa.
 Psh: nese duam te gjejme klientet qe jetojne ne te njejtin qytet, mund t’i veme
pseudonime te ndryshme te njejtes tabele (Customers):

 Duhet vendosur kushti c1.name != c2.name, per te evituar qe nje rresht te


kombinohet me vetveten.
Perdorimi i emrave te tjere per tabelat: Pseudonimet
(Aliases )
Marrja e te dhenave sipas nje rendi te caktuar
Grupimi dhe bashkimi (aggregate) i te dhenave
Grupimi dhe bashkimi (aggregate) i te dhenave

 Shembuj:

 Per te dhene sasine mesatare te porosive per çdo klient (ose me mire
per çdo customerid), perdorim:
Grupimi dhe bashkimi (aggregate) i te dhenave
Marrja e te dhenave nga disa tabela
 Kufizim i te dhenave qe kthen SELECT, qe mund te jete veçanerisht i
vlefshem ne aplikacionet web, eshte LIMIT.
 Ai ka dy parametra:
 numrin e rreshtit nga i cili duhet te filloje dhe
 numrin e rreshtave qe duhet te ktheje:

 Kjo query mund te lexohet si: “Selekto name nga customers dhe me
pas kthe 3 rreshta, duke filluar nga rreshti 2 ne output”
 Vereni qe numrat e rreshtave indeksohen me zero: dmth qe rreshti i
pare i output-it eshte rreshti me numer zero.
Ndryshimi i rekordeve ne bazen e te dhenave

 Mund te perdorim LIMIT per te kufizuar numrin e rekordeve qe do te


ndryshohen.
Ushtrime
Databaza: student_db
Tabelat:
student_tb (id_student, emer, mbiemer, datelindja, qyteti)
lende_tb (id_lenda, emertimi, padagogu, viti_mesimor, kredite)
notat_tb (id_student, id_lenda, nota)

 Ne phpmyadmin
 Provoni insert me datelindjen null
 Futni disa studente me te njejtin emer me insert
 Afishoni te gjithe studente qe vijne nga Tirana
 Provoni te gjeni sa here perseritet cdo emer
 Provoni te gjeni cilet jane studentet qe kane emer dhe mbiemer
te njejte

You might also like