Tema: Re: transakcijos
Autorius: 2x50
Data: 2011-11-23 14:27:35
> 1. Duomenų bazėje dirbti galima ir privaloma naudojant tik transakcijas.

Jei DBVS palaiko transakcijas, jos pacios uztikrina, kad duomenys 
redaguojami tik naudojant transakcijas. Skirtumai buna tame, kaip skirtingos 
DBVS nustato kur yra transakcijos pradzia, ir kur yra pabaiga.
Tarkim, turim toki pseudo skripta

update table_1 set col_1 = 15 where id = 7;
if x > y then
  update table_2 set col_2 = 27 where id = 12;
end if;

Vienos DBVS transformuos jas i

begin transacion
update table_1 set col_1 = 15 where id = 7;
if x > y then
  update table_2 set col_2 = 27 where id = 12;
end if;
commit;
when exception rollback;

kitos, transformuos i

begin transacion
update table_1 set col_1 = 15 where id = 7;
commit;
when exception rollback;
if x > y then
  begin transaction
  update table_2 set col_2 = 27 where id = 12;
  commit;
  when exception rollback;
end if;

del to reikia skaityt konkrecios DBVS dokumentacija, skyriuje implicit 
transactions ar pan. paprastai buna aprasyta, kaip DBVS nustato kur yra 
transakcijos pradzia ir kur pabaiga.

> 2.Visi duomenų importai, eksportai turi vykti tik tada kai baigiasi visos 
> transakcijos, siekiant turėti kuo tiksliasvius duomenis sistemoje.

Duomenu importas, kaip ir bet koks insert sakinys, taip pat yra transakcija, 
taip pat kaip ir vieno iraso iterpimas taip pat yra duomenu importas. Del to 
DBVS traktuos taip lygiai taip pat kaip ir kitas transakcijas. Statys i eile 
ir vykdys is eile tas transakcijas, kurios ruosiasi redaguoti tuos pacius 
duomenis.
Apskritai, dideliu duomenu kiekiu vartymas yra visiskai atskira tema, ten 
visai kitos problemos, palyginus su OLTP sistemom.

> Iš to man išplaukia klausimas (duomenų bazė MySQL):

Kiek zinau MySQL kazkuriam savo pavidale is viso nenaudoja transakciju, 
tokia baze gink dieve neturi buti naudojama duomenu redagavimui - isimtinai 
tik skaitymui (neskaitant duomenu krovimo i tokia baze, kur transakcijas 
atitinkantis mechanizmas turetu buti suskurtas kartu su krovimo kodu).

> 1. Jai aš naudoju INSERT, UPDATE, DELETE  tiesiog paprastai tai jos vyksta 
> per transakcijas ar reikia kazkaip kitaip pradeti transakciją įvygdyti 
> INSERT ir tik po gauto rezultato užbaigti transakcija su Commit arba 
> Rollback?

zr. auksciau ir MySQL dokumentacija. Kiekvienas insert, update, delete 
vyksta per transakcija, problemos atsiranda tada, kai yra keletas komandu 
vienam skripte.

> 2. Jai vienas vartotojas daro įrašo UPDATE tai kitas vartotojas gali 
> tapatį įrašą padaryti DELETE? Ar jis galės padaryti tik tada kai baigs 
> UPDATE?

Priklauso nuo to kaip transaction manager'is sustatys transakcijas i eile. 
Jei pirmoji bus update, antroji delete, tai jos sekmingai ivyks viena po 
kitos. Jei pirma bus delete, update transakcija baigsis klaida "irasas 
neegzistuoja".