NASTAVAK 1 Pogledi Views u My SQLu Pogledi

  • Slides: 14
Download presentation
- NASTAVAK -. 1

- NASTAVAK -. 1

Pogledi (Views) u My. SQL-u • Pogledi su virtuelne tabele koje nastaju kao rezultat

Pogledi (Views) u My. SQL-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 My. SQL u verziji 5. 0. 1 Kreiranje pogleda CREATE VIEW view_name AS SELECT column_list. . . FROM table_name; 2

Pogledi (Views) u My. SQL-u • Kreiranjem pogleda se ne pravi kopija postojećih podatka

Pogledi (Views) u My. SQL-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 3

Pogledi (Views) u My. SQL-u • Ažuriranje podataka korišćenjem pogleda – Ograničenja prilikom ažuriranja:

Pogledi (Views) u My. SQL-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; 4

Transakcije u My. SQL-u • Transakcija označava skup SQL komandi koji se izvršavaju kao

Transakcije u My. SQL-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. • 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. 5

Transakcije u My. SQL-u Transakcione baze moraju obezbediti 4 osobine koje se nazivaju ACID:

Transakcije u My. SQL-u Transakcione baze moraju obezbediti 4 osobine koje se nazivaju ACID: • Atomicity (nedeljivost) Iskaz se sastoji od nekoliko logičnih celina - skupa upita. Ili su svi upiti izvršeni uspešno ili nijedan od njih. • Consistency (usklađenost) Baza je u konzistentnom 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. • Isolation (izolovanost) 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). • Durability (trajnost) Kada je transakcija uspešno obavljena njeni efekti su permanentni. 6

Transakcije u My. SQL-u Preduslov: korišćenje transaction-safe storage engine (mašina za skladištenje podataka kao

Transakcije u My. SQL-u Preduslov: korišćenje transaction-safe storage engine (mašina za skladištenje podataka kao što su Inno. DB, 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} 7

Transakcije u My. SQL-u • START TRANSACTION i BEGIN naredba označavaju početak nove transakcije.

Transakcije u My. SQL-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 8

Transakcije u My. SQL-u • Predefinisano je da My. SQL radi sa uključenim autocommit

Transakcije u My. SQL-u • Predefinisano je da My. SQL radi sa uključenim autocommit modom. To znači da čim izvršite SQL naredbu koja ažurira neku tabelu, My. SQL promenu zapisuje u bazi. • Ako koristite transaction-safe storage engine (kao što su Inno. DB, 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. 9

Transakcije u My. SQL-u create table test( ime char(20) not null unique); start transaction;

Transakcije u My. SQL-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; 10

Transakcije u My. SQL-u start transaction koristimo za početak transakcije. Nakon uspešno izvršena 2

Transakcije u My. SQL-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. 11

Transakcije u My. SQL-u • Primer neuspele transakcije: set autocommit=0; start transaction; insert into

Transakcije u My. SQL-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. 12

Transakcije u My. SQL-u Počev od verzije My. SQL 4. 1. 1 moguće je

Transakcije u My. SQL-u Počev od verzije My. SQL 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 tacka 1; insert into test(ime) values('Mirko'); rollback to savepoint tacka 1; insert into test(ime) values('Dragan'); commit; • Nakon unosa prvog imena (Lazar) snimili smo poziciju u transakciji kao tacka 1. Unos imena Mirko je poništen vraćanjem na tačku 1, 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. 13

Transakcije u My. SQL-u Naredbe na koje ROLLBACK nema efekta su DDL naredbe, kao

Transakcije u My. SQL-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 Zbog toga ih ne treba koristiti u transakcijama. 14