140 likes | 314 Views
- NASTAVAK -. 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
E N D
Pogledi (Views) u MySQL-u • Pogledisuvirtuelnetabelekojenastajukaorezultat SQL upitanadjednomili više tabela. • Oni fizički ne postoje. • Pogledi predstavljaju jednostavan metod smeštanja SQL naredbe ubazu podataka. • Uvedeni su u MySQL u verziji 5.0.1 Kreiranje pogleda CREATE VIEWview_name AS SELECTcolumn_list...FROMtable_name;
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
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;
Transakcije u MySQL-u • Transakcijaoznačavaskup SQL komandikoji se izvršavajukaonedeljiva celina. • Akosusve SQL komandekoje čine transakciju uspešnoizvršeneonda je transakcijaizvršena, u suprotnomse 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.
Transakcije u MySQL-u Transakcionebazemorajuobezbediti 4 osobinekoje se nazivajuACID: • Atomicity (nedeljivost)Iskaz se sastojiodnekolikologičnihcelina - skupaupita. Ili susviupitiizvršeniuspešnoilinijedanodnjih. • Consistency (usklađenost)Baza je u konzistentnomstanju pre iposletransakcije. 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)Transakcijanemaefekatnadrugeprocese. To značidaefektipojedinačnihupita u transakcijinisuvidljividrugimklijentimasvedok se transakcijauspešno ne izvrši (commit iskazom). • Durability (trajnost)Kada je transakcijauspešnoobavljenanjeniefektisupermanentni.
Transakcije u MySQL-u Preduslov: korišćenje transaction-safe storage engine (mašina za skladištenje podataka kao što suInnoDB, 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}
Transakcije u MySQL-u • START TRANSACTIONiBEGIN naredbaoznačavaju početak nove transakcije. • COMMITpotvrđuje tekuću transakciju, čineći promene nastale tom transakcijom stalnim. • ROLLBACKponiš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
Transakcije u MySQL-u • Predefinisano je da MySQLradi sa uključenim autocommitmodom. To znači da čim izvršite SQL naredbu koja ažurira neku tabelu,MySQLpromenu zapisuje u bazi. • Ako koristite transaction-safe storage engine (kao što suInnoDB, BDB ili NDB Cluster),možete isključiti autocommitmod 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.
Transakcije u MySQL-u create table test( imechar(20) not null unique); start transaction; insert into test(ime) values('Jovan'); insert into test(ime) values('Petar'); commit;
Transakcije u MySQL-u start transactionkoristimozapočetaktransakcije. Nakonuspešnoizvršena 2 upitakoristilismocommitzakrajtransakcije, koja je u ovomslučajuuspešnoobavljena. Važno je danijednaodpromenatokomtransakcije (unošenjenovogimenaPetar) nijevidljivadrugimklijentimasvedok se ne izvršicommit. To je osobinaizolovanosti.
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; • Tokomtransakcijedošlo je do greške, jersmopokušalidaunesemovećpostojećuvrednost (Jovan) u poljedefinisanokaojedinstveno (unique). • Kao rezultatdošlo je do greške, pa smoizvršilirollbackiskaz. • Tabelasadržiisteslogovekaoi pre početkatransakcije, tj. imeLazarkoje je prvounetonapočetkutransakcijenijeostaloupisanojertransakcija u celininijeuspela.
Transakcije u MySQL-u PočevodverzijeMySQL4.1.1 moguće je snimititačku u transakciji (savepoint) nakoju se možemovratiti 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 unosaprvogimena (Lazar) snimilismopoziciju u transakcijikaotacka1. UnosimenaMirko je poništenvraćanjemnatačku1, nakonkojesmouneliuspešnoimeDraganiodradili commit. • Na krajutransakcije, vidi se daimeMirkonijeunetojersmo se vratilinatačku u transakcijigde to imenijepostojalo.
Transakcije u MySQL-u Naredbe na koje ROLLBACK nema efekta suDDL 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.