Tema: Re: transakcijos
Autorius: Niekados
Data: 2011-11-23 14:51:04
Hmm. Aš MySQL aprašyme randu tai :

Šaltinis:

http://dev.mysql.com/doc/refman/5.0/en/commit.html

START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;

Tai turi palaikyt trnasakcija.

> 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).

O jai nenaudoti MySQL ir išvengt visų išvardintų nesklandumų tai gaunasi 
pasirinkimas MSSQL Express (kad būtų nemokama duomenų bazė, ir neribojamas 
duomenų kiekis, nors gal ir riboja iki 2 Gb dydio) ?  Privalumas ir poreikis 
nemokamai DB.



"2x50" <2x50@100.gr> wrote in message 
news:jaiorn$kcn$1@trimpas.omnitel.net...
>> 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".
>