Možeš da ga staviš u stored proceduru, pre nego što eksplicitno kažeš BEGIN TRANSACTION
Evo ti primera pa će ti verovatno biti jasnije
u QA otvori dva nova prozora za pisanje upita, to će simulirati kao da imaš dva konkurentna korisnika sa dve odvojene konekcije
u prvom prozoru iskopiraj sledeći kod, nadam se da imaš pubs bazu.
Code:
use pubs
go
SET TRANSACTION ISOLATION LEVEL
SERIALIZABLE
GO
BEGIN TRAN
SELECT title FROM titles
WHERE title_id LIKE 'BU%'
COMMIT TRAN
u drugom prozoru iskopiraj sledeći kod
Code:
use pubs
go
INSERT titles VALUES ('BU3000',
'Itzik and His Black Belt SQL Tricks',
'popular_comp', '0877', 39.95,
10000, 12, 15000, null,
'Sep 15 2000')
E sada smo spremni da simuliramo dva konkurentna korisnika.
1. Izvrši prvi skript sve do COMMIT TRAN, taj deo ćemo kasnije da izvršimo.
2. Izvrši ceo drugi skript, videćeš da će se globus vrteti što znači da drugi korisnik čeka da upiše podatke u tabelu koji imaju isti kriterijum za primarni ključ kao select prvog korisnika tj. oba korisnika žele da rade nad istim resursima
3. Sada se vrati na prvi skript i izvrši samo COMMIT TRAN.
4. Vrati se na drugi skript i videćeš u messages da ti je upisan jedan red tj. insert je izvršen ali tek pošto je prvi korisnik commitovao svoju otvorenu transakciju.
E sad malo objašnjenja
Kada se izvši prvi korak to znači da konekciji prvog korisnika je setovan isolation level na serializable i da je otvorio transakciju gledanja odredjenih podataka. Kada drugi korisnik želi da radi nešto sa podacima koji zadovoljavaju kriterijum prvog korisnika tj. drugi korisnik pokušava da insertuje podatke koji počinju BU a za to vreme prvi korisnik je selectovao podatke sa like BU% i pri tome ima otvorenu transakciju i isolation level serializable, a ako pogledaš gornju tablicu u takvoj sitauciji konkuretni korisnik nemože ni da update, insert ni delete podataka već mora da čeka da prvi korisnik ili commituje ili rollbackuje otvorenu transakciju.
Kada se izvrši treći korak tj prvi korisnik je commitovao svoju otvorenu transakciju to znači da više ne drži lockove nad podacima tako da konkuretni korisnik može da izvrši svoj insert i nemora više da čeka.
Nadam se da će ti sada ovo malo više pomoći.
[Ovu poruku je menjao dekibre dana 15.06.2007. u 16:21 GMT+1]