Rad sa bazama podataka daje prave efekte onda kada se radi u mrežnom okruženju, kada veliki broj korisnika istovremeno pristupa podacima iz jedne baze. U tom slučaju postoji realna opasnost da dva ili više korisnika – klijenata pristupe istom ili istim podacima u cilju čitanja ili izmene podataka. U tom slučaju može doći do pojave pogrešnih rezultata, pa ažurnost i integritet podataka mogu biti ugroženi.

Da bi se sprečile  štetne posledice do kojih može doći kada više korisnika istovremeno pristupa istim podacima, većina sistema za upravljanje bazama podataka koristi razne tehnike zaključavanja podataka (Data Locks): Kada jedan korisnik pokuša da izvede neku operaciju sa podacima, DBMS te podatke automatski zaključava, naravno samo ako je u pitanju operacija  ažuriranja (UPDATE ili DELETE). Nema potrebe zaključavati podatke kada ih  neki upit samo čita, odnosno upit ne sme da blokira ažuriranje.

Postoji više strategija zaključavanja, od vrlo pesimističkih gde se zaključava čitava tabela (table-level locking) ili blokovi-stranice podataka (page-level locking), preko zaključavanja samo onih redova koje  se ažuriraju (row-levellocking), do optimističkih da do izmene istih polja neće ni doći (bez zaključavanja).
Zbog mogućih problema, sistemi za upravljanje bazama podataka moraju imati ugrađene mehanizme čuvanja prethodnih verzija podataka, pravljenje rezervnih kopija (BACKUP), a takođe vode se i dnevnici transakcija.

Transakcija predstavlja grupa SQL komandi koje se izvršavaju po principu “sve ili ništa”.

Transakcija je logička jedinica posla koja treba da se izvrši. Ona sadrži jednu ili više SQL naredbi.
Transakcija se izvršava potpuno, ili se neće izvršiti ni jedan njen deo (atomičnost transakcije). Ako transakcija ima više SQL naredbi, njihovo dejstvo se prihvata u celosti ili se sve  poništavaju.  
Ako treba preneti novac s jednog računa na drugi, onda se jednom naredbom novac skida s nekog računa a drugom naredbom se stavlja na ciljni račun. Ako prva naredba uspe, a druga naredba ne uspe, mora se poništiti i  dejstvo prve naredbe. Ako se transakcija prekine, sistem se mora vratiti u pre početka transakcije (konzistentnost).
Transakcija mora biti zasebna celina, čije izvršenje ne zavisi od drugih transakcija. Ova osobina se zove izolovanost ili serijalnost. Kada se transakcija uspešno završi, ne postoji ni jedan razlog da se ona poništi  (trajnost).

Tipovi transakcija
Kada je reč o tipovima transakcija, postoje dva tipa transakcija, to su:

  • Eksplicitna transakcija i
  • Implicitna transakcija

Kod eksplicitne transakcije eksplicitno se definiše početak i kraj transakcije. A kod implicitne transakcije SQL Server automatski startuje novu transakciju pošto se tekuća transakcija potvrdi ili poništi. AUTOCOMMIT je podrazumevana opcija za SQL Server i odnosi se na pojedine Transact-SQL komande.
 
Eksplicitne transakcije
Kod eksplicitne transakcije eksplicitno se definiše početak i kraj transakcije. Za početak transakcije se koristi komanda BEGIN TRANSACTION a za kraj transakcije komanda COMMIT TRANSACTION.

Poništavanje eksplicitne transakcije
Za poništavanje transakcije koristi se komanda ROLLBACK TRANSACTION.

Neki postupci se ne mogu izvesti u okviru transakcija. To se, pre svega, odnosi na naredbe za definisanje baze  (ALTER  i  CREATE DATABASE)  i  nekih  objekata  (CREATE INDEX, TABLE i sl.).
Sve  promene  nad  bazom  podataka  izazvane  SQL naredbama najčešće  se odražavaju samo na stanje podataka u operativnoj memoriji korisnikovog računara ili servera. Ako želimo da se izmene odraze na stvarne podatke na disku (server), potrebno je potvrditi ove promene, transakcije, naredbom COMMIT  WORK ili odustati od njih naredbom ROLLBACK WORK. Naime, transakcija baze podataka je logička jedinica posla koja se izvršava do kraja ili se poništava u celini. Neke transakcije mogu trajati vrlo dugo (izmena velikog broja podataka).   

Primere pogledajte na 113 i 114 strani dokumenta koji se nalazi na OVOM LINKU

Last modified: Friday, 16 April 2021, 9:40 AM