Mysql

Published on March 2017 | Categories: Documents | Downloads: 35 | Comments: 0 | Views: 353
of 75
Download PDF   Embed   Report

Comments

Content

Open source
sistem za upravljanje bazama
podataka

1

• MySQL je veoma brz i robustan sistem za upravljanje
relacionim bazama podataka.
• Server upravlja pristupom podacima, pri tome omogućuje da
s njima radi više korisnika istovremeno i da pristup podacima
bude brz i dozvoljen samo ovlašćenim korisnicima.
• MySQL je na raspolaganju korisnicima od 1996. godine. Do
sada je više puta dobijao nagradu "Reader's Choice Award"
u svojoj kategoriji.

2

Šta je to što MySQL čini tako
posebnim ?
• MySQL je Open Source
RSUBP.
– Dostupan je na Internetu i pri
tome je besplatan.
– može se preuzeti i koristiti prema
GPL licenci.
– Cena za komercijalnu upotrebu i
podršku su niski.
Ovo je veliki kontrast drugim komercijalnim
sistemima za baze podataka (kao što su Oracle,
MS SQL, Informix i sl.), kreiranih od strane
velikih kompanija, koji su pri tome veoma skupi.

3

Šta je to što MySQL čini tako
posebnim ?
• Tehnička podrška. MySQL je jedan
od retkih open source projekata iza
kojih stoje konkretne firme (MySQL AB)
koja isključivo radi na održavanju i
razvoju tog proizvoda.
Uz to, postoji ogroman broj korisnika
koji direktno utiču na razvoj.

4

Šta je to što MySQL čini tako
posebnim ?
• Brzina i stabilnost. Svaki od sistema za
baze podataka ima oblasti u kojima se
posebno ističe. Jedna od ovih oblasti je
brzina - široko je priznato da su odgovori
ovog RDBMS u rangu sa najbržim
sistemima.
• Upravo zbog brzine, MySQL često
predstavlja izbor za internet aplikacije, gde
se zbog velikog saobraćaja zahteva velika
brzina odziva.
5

Šta je to što MySQL čini tako
posebnim ?
• Funkcionalnost.
MySQL nudi
mnoštvo opcija koje odlikuju „velike”
RSUBP kao što su:
– podrška za ANSI SQL, kao i postojanje
sopstvene ekstenzije
– online backup,
– replikacija,
– podrška za SSL (Secure Sockets Layer),
– integracija u skoro sva razvojna okruženja.

6

Šta je to što MySQL čini tako
posebnim ?
• Lakoća upotrebe.
– Distribucija MySQL-a je relativno mali paket, koji ne
zahteva stotine i stotine megabajta kao drugi SUBP.
– Razvojna filozofija ovog sistema fokusirana je na
široku i laku upotrebljivost, gde se u paket ubacuju
samo neophodne funkcije. Ovo ga čini relativno
lakim za razumevanje, za instaliranje, podešavanje i
administraciju.

7

Šta je to što MySQL čini tako
posebnim ?
• Portabilnost. MySQL može da se pokrene na
brojnim paltformama, a najvažnije su UNIX, Linux i
Windows.

8

Šta je to što MySQL čini tako
posebnim ?
• Rapidni razvoj. MySQL od verzije 5.0 uključuje
podršku za:







transakcije,
replikaciju,
tekstualno pretraživanje i
RAID fajl-sisteme.
Trigere (okidače)
uskladištene procedure (stored procedures)

9

Šta je to što MySQL čini tako
posebnim ?
• Interoperabilnost.
– može da se koristi u kombinaciji sa velikim brojem
drugog softvera, bilo open source ili komercijalnog.
– Ove alatke vam omogućavaju da na lak način
iskoristite sve mogućnosti baza podataka.

10

Šta je to što MySQL čini tako
posebnim ?
• Programibilnost.
– Ukoliko postojeći softver ne odgovara vašim
potrebama, možete kreirati sopstveni.
– Dostupni su interfejsi za veliki broj
programskih jezika, kao što su:








C,
C++,
Perl,
PHP,
Python,
Java,
Ruby, itd.
11

Šta je to što MySQL čini tako
posebnim ?


Saradnja sa najvećim
proizvođačem poslovnog
softvera SAP – om na
maxDB-u značajno utiče i na
kvalitet osnovnog proizvoda



Uz sve prethodno navedeno,
ne čudi što se MySQL razvija
brže od rivalskih proizvoda i
što lista korisnika
komercijalne verzije ovog
sistema za upravljanje
bazama podataka izgleda
ovako:
12

Tipovi podataka u MySQL-u


Numerički tipovi podataka
– NUMERIC ili DECIMAL (sinonim je DEC)
• Čuvanje vrednosti sa pokretnim zarezom
• Obično se koriste za rad sa novčanim vrednostima
• Opseg vrednosti jednak je kao za brojeve s pokretnim zarezom dvostruke tačnosti

– INTEGER i varijante
• Standardni tip za celobrojne vrednosti
• Smešta se u 4 bajta, što daje 232 vrednosti
• Varijante:
– TINYINT zauzima jedan bajt (28 mogućih vrednosti). Sinonim je

BIT
– SMALLINT zauzima dva bajta (216 mogućih vrednosti).
– MEDIUMINT zauzima tri bajta (224 mogućih vrednosti).
– BIGINT zauzima osam bajtova (264 mogućih vrednosti).
– FLOAT, namenjen za rad s brojevima s pokretnim zarezom jednostruke tačnosti.
– DOUBLE, namenjen za rad s brojevima s pokretnim zarezom dvostruke tačnosti.
• Sininimi za ovaj tip su REAL i DOUBLE PRECISION

13

Tipovi podataka u MySQL-u


Znakovni i tekstualni tipovi podataka
– CHAR
• Čuvanje znakovnih vrednosti fiksne dužine
• Maksimalna dužina podatka tipa CHAR je 255 znakova

– VARCHAR
• Čuvanje znakovnih vrednosti promenljive dužine
• Maksimalna dužina podatka tipa VARCHAR je 255 znakova

– TEXT i njegove varijante
• TEXT – za skladištenje tekstualnih podatka dužih od 255 znakova
• Varijante






TINYTEXT može sadržati najviše 255 (28-1) znakova ili bajtova
TEXT može sadržati najviše 65535 (216-1) znakova ili bajtova (64 KB)
MEDIUMTEXT može sadržati najviše 224-1 znakova ili bajtova (16 MB)
LONGTEXT može sadržati najviše 232-1 znakova ili bajtova (4 GB)

14

Tipovi podataka u MySQL-u


Znakovni i tekstualni tipovi podataka (nastavak)
– ENUM
• omogućava zadavanje liste mogućih vrednosti. Polje ovog tipa može sadržati
jednu vrednost iz nabrojanog skupa mogućih.
• Tip podataka ENUM deklariše se na sledeći način:
Pol enum(‘m’, ’z’)
Pošto vrednost tipa ENUM može biti i NULL, moguće vrednosti polja pol su
m,z,NULL il error

– SET
• Sličan tipu ENUM s tom razlikom što polja mogu sadržati i više vrednosti iz
nabrojanog skupa mogućih

15

Tipovi podataka u MySQL-u


Datumski i vremenski tipovi podataka
– DATE
• Čuvanje datuma u ISO redosledu godina-mesec-dan
• Datumi se prikazuju u formatu GGGG-MM-DD

– TIME
• Čuvanje podataka koji predstavljaju vreme
• Prikazuju se u formatu ČČ:MM:SS

– DATETIME
• Čuvanje datuma i vremena u formatu godina-mesec-dan ČČ:MM:SS

– TIMESTAMP
• Ako u određenom redu zadate vrednost NULL u polje se upisuje vreme kada je
red dodat tabeli ili kada je red poslednji put izmenjen

– YEAR
• Čuvanje podataka koji predstavljaju godine.
• Moguće je zadati YEAR(2) ili YEAR(4), podrazumevano je YEAR(4)
• YEAR(2) predstavlja opseg godina od 1970 do 2069.

16

Kreiranje baza podataka, tabela i
indeksa u MySQL-u
Razlikovanje malih i velikih slova u MySQL-u
• U rezervisanim rečima SQL jezika ne pravi se razlika između
upotrebe malih i velikih slova. To je standardno u svim RDBMS.
• Da li će MySQL praviti razliku između malih i velikih slova u
imenima baza podataka i tabela zavisi od operativnog sistema
pod kojim radite.
Savet: definisati sopstveni standard koji treba dosledno
primenjivati radi izbegavanja moguće konfuzije.
• U MySQL-u se u imenima kolona, indeksa i alijasa nikada ne
pravi razlika između malih i velikih slova.
17

Kreiranje baza podataka, tabela i
indeksa u MySQL-u
• Kreiranje baza podataka
create database zaposleni;
– Da je ova komanda uspešno izvršena, možete proveriti ako zadate
komandu:

show databases;
• Biranje baze podataka
– Pre kreiranja tabela ili bilo kakvih drugih promena u našoj bazi,
potrebno je da naglasimo da ćemo sve promene raditi u bazi koja
ima naziv “zaposleni”

use zaposleni ;
– Sada je izabrana (otvorena) baza podataka zaposleni i za sve
akcije koje izvršimo podrazumevaće se da se odnose na tu bazu
podataka.
18

Kreiranje baza podataka, tabela i
indeksa u MySQL-u
• Kreiranje tabela
CREATE TABLE nazivtabele (definicije kolona tabele) [TYPE=tip_tabele] ;
Ili puni oblik:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] ime_tabele
[(definicija_kolone,…)]
[opcije_za_tabelu] [komanda select]
Primer:

create table odeljenje
(odeljenje int not null auto_increment primary key,
naziv varchar(30)
) type=InnoDB;

19

Kreiranje baza podataka, tabela i
indeksa u MySQL-u
• Kreiranje indeksa
Primer:
CREATE INDEX ime ON zaposleni(ime);



Indeksi definisani nad kolonama tipa char I varchar mogu se ograničiti na prvih
nekoliko znakova u polju.
CREATE INDEX parcijalno_ime ON zaposleni(ime(5));

20

Kreiranje baza podataka, tabela i
indeksa u MySQL-u
• Brisanje baza podataka, tabela i indeksa


Brisanje baze podataka
DROP DATABASE [IF EXISTS] naziv_baze;



Brisanje tabela
DROP TABLE [IF EXISTS] naziv_tabele [,naziv_tabele, …]



Brisanje indeksa
DROP INDEX naziv_indeksa ON naziv_tabele;
21

Kreiranje baza podataka, tabela i
indeksa u MySQL-u
• Izmena strukture postojeće tabele


Primer za kreiranje indeksa:

ALTER TABLE zaposleni
ADD INDEX ime (ime);


Opšti oblik komande:

ALTER [IGNORE] TABLE ime_tabele vrsta_izmene[, vrsta_izmene,…]
Vrste_izmene:
ADD [COLUMN] definicija_kolone [FIRST | AFTER ime_kolone]
Ili ADD [COLUMN] (definicija_kolone, definicija_kolone,…)
MODIFY [COLUMN] definicija_kolone [FIRST | AFTER ime_kolone]
DROP [COLUMN] ime_kolone
Ili DROP PRIMARY KEY
22

Unos, brisanje i ažuriranje
podataka u MySQL-u
Komanda INSERT
INSERT [INTO] naziv_tabele VALUES
(vrednost_1, vrednost_2,…),
(vrednost_n, vrednost_n+1,…),
(vrednost_k, vrednost_k+1,…),
ili
INSERT [LOW_PRIORITY |DELAYED] [INTO] ime_tabele [(ime_kolone,…)]
VALUES (izraz |DEFAULT, …),)…),…
ON DUPLICATE KEY UPDATE ime_kolone=izraz, …]

23

Unos, brisanje i ažuriranje
podataka u MySQL-u

Komanda INSERT (nastavak)
ili
INSERT [LOW_PRIORITY |DELAYED] [INTO] ime_tabele [(ime_kolone,…)
SELECT …
Ili

INSERT [LOW_PRIORITY |DELAYED] [INTO] ime_tabele [(ime_kolone,…)
SET ime_kolone = (izraz |DEFAULT), …
ON DUPLICATE KEY UPDATE ime_kolone=izraz, …]

24

Unos, brisanje i ažuriranje
podataka u MySQL-u
Komanda INSERT (nastavak)
• Neobavezne odredbe:

– LOW PRIORITY, kojom se zadaje da se komanda INSERT izvršava sa niskim
prioritetom, s tim što se blokira klijentski program za unos podataka.

– DELAYED, kojom se zadaje da se izvršavanje odloži, omogućava izvršavanje
drugog upita, s tim što če predhodni upis biti obavljen tek kada je tabela slobod
Obe opcije čine da se upisivanje podataka u tabelu odloži dom više ne bude ni
jednog klijenta koji pokušava da učita podatke iz tabele.

– Opcija ON DUPLICATE KEY UPDATE pruža rešenje problema dupliranog
primarnog ključa ili duplirane jedinstvene vrednosti. Iza ove opcija sledi naredb
UPDATE koja menja postojeću vrednost u koloni.
25

Unos, brisanje i ažuriranje
podataka u MySQL-u
Komanda REPLACE


Slično deluje kao i komanda INSRT, s tom razlikom što ako dođe do dupliranja klju
novi red koji želite da upišete zamenjuje posojeći red.
REPLACE [LOW_PRIORITY |DELAYED]
[INTO] ime_tabele [(ime_kolone,…)] VALUES (izraz,…),(…),…
ili

REPLACE [LOW_PRIORITY |DELAYED] [INTO] ime_tabele [(ime_kolone,…
SELECT …
ili
REPLACE [LOW_PRIORITY |DELAYED] [INTO] ime_tabele [(ime_kolone,…
SET ime_kolone = (izraz |DEFAULT), …
26

Unos, brisanje i ažuriranje
podataka u MySQL-u
Komanda DELETE



Omogu’ava brisanje redova iz tabele.
Primer:
DELETE FROM odeljenje;



Op[ti oblik ove komande je:
DELETE [LOW_PRIORITY] [QUICK] FROM ime_tabele
[WHERE uslov]
[ORDER BY …]
[LIMIT broj_redova]

Ili
DELETE [LOW_PRIORITY] [QUICK] ime_tabele[, ime_tabele…]
FROM reference_na_tabele
27
[WHERE uslov]

Unos, brisanje i ažuriranje
podataka u MySQL-u
Komanda DELETE (nastavak)
Ili
DELETE [LOW_PRIORITY] [QUICK]
FROM ime_tabele[, ime_tabele…]
USING reference_na_tabele
[WHERE uslov]
Delete zaposleni, vestina
FROM zaposleni, vestina, odeljenje
WHERE zaposleni.zaposleni =
vestina.zaposleni
AND zaposleni.odeljenje = odeljenje.odeljenje
AND odeljenje.naziv = ‘Finansije’;

Delete from zaposleni, vestina
USING zaposleni, vestina, odeljenje
WHERE zaposleni.zaposleni =
vestina.zaposleni
AND zaposleni.odeljenje =
odeljenje.odeljenje
AND odeljenje.naziv = ‘Finansije’;

28

Unos, brisanje i ažuriranje
podataka u MySQL-u
Komanda TRUNCATE




Omogu’ava brisanje svih redova iz tabele.
Brza je od naredbe DELETE
Primer:
TRUNCATE TABLE zaposleni;

29

Unos, brisanje i ažuriranje
podataka u MySQL-u
Komanda UPDATE
• Omogućava ažuriranje postojećih redova u tabelama.
Primer:
UPDATE zaposleni
SET posao=‘DBA’
WHERE zaposleni=6651
Naredba UPDATE ima sledeći oblik:

UPDATE ime_tabele
SET ime_kolone1=izraz1 [,ime_kolone2 = izraz2…]
[WHERE uslov]
[ORDER BY …]
[LIMIT broj_redova]
30

Unos, brisanje i ažuriranje
podataka u MySQL-u
Grupno unošenje podataka pomoću komande LOAD DATA INFILE


Datoteka Odeljenje.txt

42
128
NULL
NULL

Finansije
istrazivanje i razvoj
Ljudski resursi
Marketing

Datoteka je u standardnom formatu za primenu naredbe LOAD DATA INFILE,
Sto znači da se svaki red podataka nalazi u posebnom redu datoteke, a kolone su razdvojene
znakom za tabulator.

Primer:
LOAD DATA LOCAL INFILE ‘odeljenje.txt’ INTO TABLE odeljenje;
31

Unos, brisanje i ažuriranje
podataka u MySQL-u
Grupno unošenje podataka pomoću komande LOAD DATA INFILE nastavak


Datoteka novi_programeri.csv

Julia, programer, 128
Douglas, programer, 128
Tim, programer, 128

Primer:
LOAD DATA LOCAL INFILE ‘e:\\novi_programeri.csv’
INTO TABLE zaposleni
FIELDS TERMINATED BY ‘,’ /* obavezno mora da se naznaci */
LINES TERMINATED BY ‘/n’ /* nije neophodno */
IGNORE 2 LINES /* posto su prva dva reda zaglavlje treba ih preskociti */
(ime,posao,odeljenje); /* posto datoteka ne sadrzi sifre zaposlenih moramo
naznačiti u koja polja (i kojim redosledom) želimo da prenesemo podatke
32*/

Napredne mogućnosti MySQL-a






Transakcije
Pogledi (Views)
Uskladištene procedure (Stored procedures)
Funkcije
Trigeri

33

Transakcije u MySQL-u
• Transakcija označava skup SQL komandi koji se izvršavaju kao
nedeljiva celina.
• Ako su sve SQL komande koje čine transakciju uspešno izvršene onda
je transakcija izvršena, u suprotnom se ne sme ništa uraditi. Ovaj
koncept je poznat kao nedeljivost (atomicity).
• Klasični primer je iz bankarskog okruženja: Određeni novčani iznos
treba prebaciti sa računa jedne osobe na račun druge osobe:
UPDATE racun SET saldo=saldo-500 WHERE vlasnik = “Zoran”;
UPDATE racun SET saldo=saldo+500 WHERE vlasnik = “Dragan”;
Oba SQL upita moraju biti izvršena ili nijedan.
Oba upita čine transakciju.
34

Transakcije u MySQL-u


Transakcione baze moraju obezbediti 4 osobine koje se skraćeno nazivaju



Atomicity (nedeljivost)



Consistency (usklađenost)



Isolation (izolovanost)



Durability (trajnost)

ACID:

Iskaz se sastoji od nekoliko logičnih celina - skupa upita. Ili su svi upiti izvršeni uspešno ili nijedan
od njih.

Baza je u koezistentnom stanju pre i posle transakcije. Svaka operacija nad podacima prebacuje
bazu podataka iz jednog ispravnog stanja u drugo. Ne sme biti “međustanja” u kojima podaci nisu
potpuno usklađeni.

Transakcija nema efekat na druge procese. To znači da efekti pojedinačnih upita u transakciji
nisu vidljivi drugim klijentima sve dok se transakcija uspešno ne izvrši (commit iskazom).

Kada je transakcija uspešno obavljena njeni efekti su permanentni.

35

Transakcije u MySQL-u
Preduslov: korišćenje transaction-safe storage engine
(mašina za skladištenje podataka kao što su InnoDB,
BDB ili NDB Cluster),
START TRANSACTION, COMMIT i ROLLBACK

START TRANSACTION | BEGIN [WORK]
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
SET AUTOCOMMIT = {0 | 1}
36

Transakcije u MySQL-u
• START TRANSACTION i BEGIN naredba
označavaju početak nove transakcije.
• COMMIT potvrđuje tekuću transakciju, čineći
promene nastale tom transakcijom stalnim.
• ROLLBACK poništava tekuću transakciju,
otkazujući sve promene koje su o okviru nje
izvršene.
• Naredba SET AUTOCOMMIT uključuje ili
isključuje autocommit mod za aktivnu
konekciju
37

Transakcije u MySQL-u
• Predefinisano je da MySQL radi sa uključenim autocommit
modom. To znači da čim izvršite SQL naredbu koja ažurira
neku tabelu, MySQL promenu zapisuje u bazi.
• Ako koristite transaction-safe storage engine (kao što su
InnoDB, BDB ili NDB Cluster), možete isključiti autocommit
mod na sledeći način:
SET AUTOCOMMIT=0;
Napomena:ako isključite automatsko potvrđivanje transakcija
nije neophodno izričito zadati komandu START
TRANSACTION da biste započeli transakciju.
38

Transakcije u MySQL-u
create table test(
ime char(20) not null unique);
start transaction;
insert into test(ime) values(“Jovan”);
insert into test(ime) values(“Petar”);
commit;

39

Transakcije u MySQL-u
• start transaction koristimo za početak
transakcije.
• Nakon uspešno izvršena 2 upita koristili smo
commit za kraj transakcije, koja je u ovom slučaju
uspešno obavljena.
• Važno je da nijedna od promena tokom
transakcije (unošenje novog imena Petar) nije
vidljiva drugim klijentima sve dok se ne izvrši
commit. To je osobina izolovanosti.
40

Transakcije u MySQL-u
• Primer neuspele transakcije:
set autocommit=0;
start transaction;
insert into test(ime) values (”Lazar”);
insert into test(ime) values (“Jovan”);
rollback;

• Tokom transakcije došlo je do greške, jer smo
pokušali da unesemo već postojeću vrednost
(Jovan) u polje definisano kao jedinstveno
(unique).
• Kao rezultat došlo je do greške, pa smo izvršili
rollback iskaz.
• Tabela sadrži iste slogove kao i pre početka
transakcije, tj. ime Lazar koje je prvo uneto na
početku transakcije nije ostalo upisano jer
transakcija u celini nije uspela.

41

Transakcije u MySQL-u
• Počev od verzije MySQL 4.1.1 moguće je snimiti tačku u transakciji
(savepoint) na koju se možemo vratiti rollback-om.
Primer:
set autocommit=0;
start transaction;
insert into test(ime) values('Lazar');
savepoint tacka1;
insert into test(ime) values('Mirko');
rollback to savepoint tacka1;
insert into test(ime) values('Dragan');
commit;
• Nakon unosa prvog imena (Lazar) snimili smo poziciju u transakciji kao
tacka1. Unos imena Mirko je poništen vraćanjem na tačku1, nakon koje
smo uneli uspešno ime Dragan i odradili commit.
• Na kraju transakcije, vidi se da ime Mirko nije uneto jer smo se vratili na
tačku u transakciji gde to ime nije postojalo.
42

Transakcije u MySQL-u
Naredbe na koje ROLLBACK nema efekta
su DDL naredbe, kao što su:
• CREATE ili DROP DATABASE,
• CREATE, ALTER ili DROP TABLE ili
• CREATE, ALTER ili DROP PROCEDURE
I zbog toga ih ne treba koristiti u transakcijama.

43

Pogledi (Views) u MySQL-u
• Pogledi su virtuelne tabele koje nastaju kao rezultat
SQL upita nad jednom ili više tabela.
• Oni fizički ne postoje.
• Pogledi predstavljaju jednostavan metod smeštanja SQL
naredbe u bazu podataka.
• Uvedeni su u MySQL u verziji 5.0.1
Kreiranje pogleda

CREATE VIEW view_name AS SELECT
column_list... FROM table_name;
44

Pogledi (Views) u MySQL-u
• Kreiranjem pogleda se ne pravi kopija
postojećih podatka iz tabele ili tabela koje
su učestvovale u kreiranju pogleda, već je
to samo memorisanje SQL komande.
• Pogled je po svemu ravnopravan sa
ostalim tabelama baze podataka:
– mogu se pisati upiti koji se odnose na jedno ili
više polja pogleda
– Mogu se u okviru upita povezivati sa ostalim
tabelama baze podataka
45

Pogledi (Views) u MySQL-u
• Ažuriranje podataka korišćenjem pogleda
– Ograničenja prilikom ažuriranja:
• za ažuriranje podataka ne mogu biti korišćeni pogledi koji sadrže
sledeće SQL klauzule :
– UNION
– DISTINCT i DISTINCTROW
– HAVING i GROUP BY klauzule

• Brisanje podataka korišćenjem pogleda
– Ograničenja prilikom brisanja:
• Za brisanje podataka se mogu koristiti isključivo pogledi kreirani nad
jednom tabelom.

• Brisanje pogleda
DROP VIEW [IF EXISTS] view_name;
46

Uskladištene procedure u MySQL-u
Uskladištena procedura (stored procedure) je procedura
(potprogram ili metod u programskim jezicima) koja je
smeštena u bazi podataka.
MySQL podržava dve vrste ovakvih procedura:

uskladištene procedure koje ne vraćaju vrednost

funkcije koje vraćaju vrednosti na isti način kao i funkcije
ugrađene u MySQL.
• Uskladištena procedura ima naziv, listu parametara i sadrži
jednu ili više SQL naredbi

47

Uskladištene procedure u MySQL-u
Zašto se koriste ?
•Iako predstavljaju novu mogućnost u okviru MySQL-a,
odavno postoje u ostalim RDBMS
•Uskladištene procedure su brze. Efekat brzine se postiže pre
svega kroz smanjenje mrežnog saobraćaja.
•Naročito su pogodne za ponavljajuće zadatke koji zahtevaju
proveru, iteraciju, sa malo ili bez interakcije sa korisnikom
•Ako promenite jezik za pristup bazi podataka ne bi trebalo da
bude problema jer je logika u bazi podataka a ne aplikaciji.
•Sintaksa uskladištenih procedura MySQL-a je bliska
SQL:2003 standardu, tako da se lako mogu primeniti i na
drugim RDBMS
48

Uskladištene procedure u MySQL-u
Važno !!!
S obzirom da su uskladištene procedure uvedene u verziji 5,
neophodno je prvo proveriti koja verzija je instalirana na
računaru, da biste bili sigurni da ih uopšte možete koristiti.
show variables like 'version';
Ili
SELECT VERSION();

49

Uskladištene procedure u MySQL-u
• Kreiranje pomoću MySQL Query Browser-a
Opcija Script > Create Stored Procedure / Function
Ili
desni klik u prozoru Shemata i izbor opcije
Create Stored Procedure / Function

50

Uskladištene procedure u MySQL-u
Primer :
DELIMITER $$
DROP PROCEDURE IF EXISTS
`zaposleni`.`SP_proba` $$
CREATE PROCEDURE `SP_proba`()
BEGIN
select * from zaposleni;
telo procedure
(glavni blok)

END $$
DELIMITER ;
51

Uskladištene procedure u MySQL-u
Pozivanje uskladištene procedure :
call SP_proba();

52

Uskladištene procedure u MySQL-u
• Naziv uskladištene procedure nije case
senzitivan.
• U jednoj bazi sve uskladištene procedure moraju
imati različite nazive, što znači da preklapanje
(overloading) procedura nije moguće
• Naziv uskladištene procedure može sadržati
maksimalno 64 znaka uključujući i praznine
(space)

53

Uskladištene procedure u MySQL-u
Koje MySQL naredbe su dozvoljene u telu
uskladištene procedure ?








INSERT
UPDATE
DELETE
SELECT
DROP
CREATE
REPLACE
54

Uskladištene procedure u MySQL-u
Koje MySQL naredbe su dozvoljene u telu
uskladištene procedure ?
• Bilo koja SQL DML naredba.
• Primer:
DELIMITER $$
DROP PROCEDURE IF EXISTS `zaposleni`.`SP_brisanje_statusa` $$
CREATE PROCEDURE `zaposleni`.`SP_brisanje_statusa` ()
BEGIN
DELETE FROM status;
END $$
DELIMITER ;

55

Uskladištene procedure u MySQL-u
Koje MySQL naredbe su dozvoljene u telu uskladištene
procedure ?



Bilo koja SQL DDL naredba.
Primer:

DELIMITER $$
DROP PROCEDURE IF EXISTS
`zaposleni`.`SP_brisanje_tabele_status` $$
CREATE PROCEDURE `zaposleni`.`SP_brisanje_tabele_status` ()
BEGIN
DROP TABLE status;
END $$
DELIMITER ;
56

Uskladištene procedure u MySQL-u
Koje MySQL naredbe nisu dozvoljene u telu
uskladištene procedure ?
• Naredbe koje manipulišu uskladištenim rutinama
(procedurama i funkcijama)







CREATE PROCEDURE / CREATE FUNCTION
ALTER PROCEDURE / ALTER FUNCTION
DELETE PROCEDURE / DELETE FUNCTION
CREATE TRIGGER
ALTER TRIGGER
DELETE TRIGGER

• Naredba USE
57

Uskladištene procedure u MySQL-u
Parametri
In
DELIMITER $$
DROP PROCEDURE IF EXISTS `zaposleni`.`SP_parametar_in` $$
CREATE PROCEDURE `zaposleni`.`SP_parametar_in` (in p int)
BEGIN
SELECT * FROM zaposleni WHERE zaposleni_id = p ;
END $$
DELIMITER ;
Primena:
58

Uskladištene procedure u MySQL-u
Uslovni izrazi (IF THEN ELSE)
Primer :
DELIMITER $$
DROP PROCEDURE IF EXISTS `zaposleni`.`SP_primer_if` $$
CREATE PROCEDURE `SP_primer_if`(in parametar int)
BEGIN
declare promenljiva int ;
set promenljiva = parametar + 1;
if promenljiva = 0 then
INSERT INTO t VALUES (17,17);
end if;
if parametar = 0 then
UPDATE t
SET broj = 0, zbir = 0
WHERE broj = parameter;
end if;
END $$
DELIMITER ;

59

Uskladištene procedure u MySQL-u
Naredba CASE
Primer :
DELIMITER $$
DROP PROCEDURE IF EXISTS `zaposleni`.`SP_primer_case` $$
CREATE PROCEDURE `SP_primer_case`(in parametar int)
BEGIN
declare v1 int;
set v1 = parametar + 1;
case v1
when 0 then INSERT INTO t(broj) VALUES (17);
when 1 then INSERT INTO t(broj) VALUES (18);
else insert into t(broj) values (19);
end case;
END $$
DELIMITER ;

60

Uskladištene procedure u MySQL-u
Petlje (WHILE … END WHILE)
Primer :
DELIMITER $$
DROP PROCEDURE IF EXISTS `zaposleni`.`SP_primer_while_petlja` $$
CREATE PROCEDURE `SP_primer_while_petlja`()
BEGIN
declare brojac int;
set brojac = 0;
while brojac <= 5 do
INSERT INTO t(broj) VALUES (brojac);
set brojac = brojac + 1;
end while;
END $$
DELIMITER ;

61

Uskladištene procedure u MySQL-u
• Primer:
DELIMITER $$
DROP PROCEDURE IF EXISTS `zaposleni`.`SP_klijent` $$ /* brisanje procedure */
CREATE PROCEDURE `SP_klijent`(in klijent integer) /* naziv proc. i lista parametara */
BEGIN
/* pocetak bloka */
DECLARE promenljiva CHAR(10);
/* deklarisanje promenljivih*/
IF klijent = 17 THEN
/* pocetak IF naredbe */
SET promenljiva = ‘Tom';
/* naredba dodeljivanja */
ELSE
SET promenljiva = ‘Tim';
/* naredba dodeljivanja */
END IF;
/* kraj IF naredbe */
INSERT INTO klijent(klijent,ime,adresa,kontaktOsoba,kontaktTelefon) VALUES
(klijent,promenljiva,null,null,null);
/* SQL naredba */
END $$
DELIMITER ;

62

Funkcije u MySQL-u
• Funkcije su programi koji
– kada se pozovu vraćaju vrednost,
– moraju uvek da vrate vrednost,
– uvek vraćaju samo jednu vrednost.

• Mogu biti pozvane iz SQL naredbe.
• Ograničenje
Funkcije ne mogu da pristupe tabelama baze podataka !

63

Funkcije u MySQL-u
• Primer:
DELIMITER $$
DROP FUNCTION IF EXISTS `zaposleni`.`F_IF` $$
CREATE FUNCTION `F_IF`(parametar VARCHAR(10)) RETURNS varchar(10)
BEGIN
declare izlaz VARCHAR(10) default "Nije A";
if parametar = "A" then
set izlaz := "Jeste A";
end if;
return izlaz;
END $$
DELIMITER ;

64

Trigeri u MySQL-u

• Šta su trigeri ?
Trigeri su objekti (uskladištene procedure) pridruženi tabeli, k
se automatski aktiviraju kada se desi neki događaj vezan za t
tabelu.
• Uvedeni su u verziji 5.02 Alpha
Mogu se uspešno koristiti za validaciju podataka i druge
operacije direktno nad tabelama baze podataka.
• Kada se trigeri aktiviraju ?
Trigeri se aktiviraju kada se desi neka promena u pridruženoj
tabeli, preciznije prilikom izvršenja Insert / Update / Delete
naredbi.
65

Trigeri u MySQL-u
• Trigeri ne mogu biti korišćeni u SELECT naredbi na
isti način kao procedura ili funkcija.
• Kreiranje trigera – sintaksa
CREATE TRIGGER naziv_trigera
vreme_izvršavanja_trigera
događaj
ON tbl_name
FOR EACH ROW trigger_stmt
66

Trigeri u MySQL-u
Vreme izvršavanja trigera:
• BEFORE
• AFTER
Događaj
je ona akcija čije izvršavanje na pridruženoj tabeli
uzrokuje aktiviranje trigera. Može biti:
• INSERT
• UPDATE
• DELETE
67

Trigeri u MySQL-u
Primer : Validacija vrednosti polja
CREATE TABLE test (id INT, sum DECIMAL(10,2));
DELIMITER $$
CREATE TRIGGER insert_trig
BEFORE INSERT ON test
FOR EACH ROW
BEGIN
IF new.sum<0 THEN
SET new.sum=0;
ENDIF;
END$$
DELIMITER;

68

Trigeri u MySQL-u
Kako trigeri funkcionišu ?
• Ključna reč BEFORE opredeljuje vreme izvršenja trigera.
U ovom slučaju, triger će biti aktiviran pre svakog novog upisa zapisa u
tabelu test.
• Ključne reči FOR EACH ROW označavaju da će triger biti izvršen za svaki
novi slog.


Ključne reči OLD i NEW nam omogučavaju pristup vrednostima polja u
zapisima na koje se odnosi triger.



U INSERT trigeru može se koristiti samo NEW.ime_polja



U DELETE trigeru može se koristiti samo OLD.ime_polja

69

Trigeri u MySQL-u

• OLD i NEW
• Ključne reči OLD i NEW se koriste za pristup podacima
u zapisima tabele. OLD se koristi za vrednosti polja pre
promene, a NEW sadrži vrednost polja posle promene.
• U programu, polju koje se zove emp_name možemo
pristupiti na sledeći način: new.emp_name
• Primer:
create trigger bi_zaposleni_fer
before insert on zaposleni
for each row
set new.ime := reverse(new.ime);

70

Trigeri u MySQL-u
• Da bi se triger aktivirao potrebno je da zapis bude
dodat u odgovarajuću tabelu.
Primer:
insert into zaposleni (zaposleni,ime) values (4,’David’);

71

Trigeri u MySQL-u
• Kompleksni trigeri

– Trigeri koji sadrže više od jedne linije koda
– Tada se koriste ključne reči BEGIN i END koje imaju svrhu
da označe kompajleru početak i kraj koda trigera
– Kraj svake komande se označava pomoću znaka ;
– Zbog toga se mora definisati alternativni graničnik
(DELIMITER) za ceo programski kod.
– Obično se koristi $$
DELIMITER $$
72

Trigeri u MySQL-u
Primer:
create trigger bi_zaposleni_fer
before insert on zaposleni
for each row
begin
declare duzina numeric;
set duzina = length(new.ime);
set new.plata = new.plata * duzina;
end
73

Trigeri u MySQL-u
• Kako se trigeri mogu obrisati ?
DROP TRIGGER naziv_trigera;

74

ODBC
• ODBC (Open DataBase Connectivity), je standardan metod za
pristup bazama podataka razvijen 1992. godine.
• Cilj ODBC-a je da učini mogućim pristup podacima sačuvanim u bilo
kom formatu iz bilo koje aplikacije, bez obzira koji RDBMS upravlja
podacima.
• ODBC upravlja pristupom podacima ubacivanjem srednjeg nivoa
( middle layer) , koji se zove database driver između aplikacije i
RDBMS. Namena ovog nivoa je da upite nad podacima koje pravi
aplikacija prevede u komande koje RDBMS razume.
• Da bi ovo moglo da funkcioniše, i aplikacija i DBMS moraju imati
podršku za ODBC, što znači da aplikacija mora biti sposobna da
prosleđuje ODBC komande, a RDBMS takođe sposoban da na te
komande odgovori.
75

Sponsor Documents

Or use your account on DocShare.tips

Hide

Forgot your password?

Or register your new account on DocShare.tips

Hide

Lost your password? Please enter your email address. You will receive a link to create a new password.

Back to log-in

Close