Citat:
damso:
Dodje osoba A i kaze SELECT x FROM Table WHERE...
I sad dodje osoba B i kaze,ne znam,UPDATE FIELD (x,newvalue) ili kako vec ide u SQLu,
i to tako nekako da je proces koji sluzi osobi A prekinut tj.pauziran bash unutar izvrsenja funkcije SELECT,dakle pocela se izvrsava a nije uspela da procita iz baze.(znaci shvatimo da je funkcija SELECT tu valjda kriticna obl?) i B promeni vrednost x
a onda se nastavi proces A i nastavi se funkcija SELECT tamo gde je stala..i ona umesto starog x vrati novi x.A recimo to nije smelo da se desi.
Ne poznajes web tehnologiju. Ovaj primer koji si naveo NE MOZE da se desi jer je ova tehnologija bazirana na request-response principu i svaki korisnik ima svoj thread da pojednostavim tako da jedan thread ne moze da prekida drugi. Oni su nezavisni u najvecem broju slucajeva. Naravno, ovo vazi ako imamo jednu instancu web servera i jednu instancu baze.
Citat:
DA LI f-ju SELECT obradjuje kao kriticnu:
1)RDBMS,znaci izvrsavanje samog upita je napravljeno tako da Operativni sistem ne sme da prekine tu f-ju napola..
2)Programer,znaci ja sednem pa akd pisem sql upit svaki put kda pisem SELECT upakujem ga sa DOWN(Mutex) UP(MUTEX)
3)Neki administrator koji odlucuje kome ce od gornje dve "instance" da poveri taj zadatak.
Sta moze da se desi:
1. SELECT se izvrsio pre UPDATE. klijent B ce dobiti <staru vrednost>
2. SELECT se izvrsio posle UPDATE. klijent ce dobit <novu vrednost>
Na programeru je da resi ovu sitaciju kako njemu odgovara.
BTW, transakcije se obicno koriste kada imas multitable update koji treba da se zavrsi kao jedna celina. Ako se prekine imas mogucnost ROLLBACK-a na pocetno stanje.
Pozdrav,
Vladan
[Ovu poruku je menjao valeksa dana 28.12.2005. u 00:10 GMT+1]
[Ovu poruku je menjao valeksa dana 28.12.2005. u 00:10 GMT+1]