ugrás a tartalomhoz

Tárolt eljárás Tranzakció kezelés

aspirany · 2008. Júl. 13. (V), 19.27
Sziasztok!

Sokat kérdezek :)

Tranzakció kezelésről kérdeznék.Hogy jobb kezelni a tranzakciókat (kliens oldal agy szerver oldal)

illetve ha szerver oldal akkor tárolt eljárásban le lehet e kezelni a (COMMIT,ROLLBACK)
utasításokat.
 
1

Fejtsd ki...

janoszen · 2008. Júl. 13. (V), 19.32
Alapvetően lehetséges, hogy van létjogosultsága tárolt eljárásban indítani és befejezni tranzakciót, de (nekem legalábbis) nagyon sokszor volt olyan helyzet, hogy valamilyen külső (ergó kliens oldali) körülmény függvényében kellett rollbackelni. Ez a külső körülmény akár lehetett egy hiba is. Azt hiszem, ezt talán a helyzet és az adatbáziskezelőd függvényében kell eldönteni.
2

konkrétan

aspirany · 2008. Júl. 13. (V), 20.45
A legegyszerűbb példa raktárkezelés.

KLIENSBEN: TARNSACTION BEGIN
SQL(raktárból-1);
ha hiba
{
ROLLBACK
}
COMMIT

TÁROLT ELJÁRÁSBAN na ez az amit nem tudom hogyan kell kezelni és példát sem találtam rá a neten

VAGY

KLIENSBEN TARNSACTION BEGIN
SQL(CALL RAKTÁRBÓL(-1));
ha hiba
{
ROLLBACK
}
COMMIT
3

ugyanúgy, mint bármelyik SQL parancsot

virág · 2008. Júl. 14. (H), 10.56
Szia,

ugyanaz vonatkozik az SP-k re, mint bármilyen más SQL parancsra, tehát pl. a PHP-ból kiadhatsz ROLLBACK-ot vagy COMMIT-ot, a tárolt eljárás ennek megfelelően fog véglegesülni vagy visszagörgetődni. Példa:

Itt egy tárolt eljárás, amelyik beszúr egy sort:
CREATE PROCEDURE `teszt1`( nevpar varchar(20) )
BEGIN
	INSERT INTO nevek (nev) VALUES(nevpar);
END
ezt PHP-ból így hívhatod:
<?php
$link = @mysqli_connect("localhost", "", "");

$link->autocommit(false);

$link->select_db("tesztadmin");

$link->query("CALL teszt1('tesztnév');");

$link->rollback();

?>
Ez ugye soha nem fog beszúrni semmit, mert az SP-t mindig visszagörgettem.

A helyzet bonyolódhat akkor ha az SP-ken belül vannak más tárolt eljárások indítva, vagy vannak belső tranzakciók, de ezeket az SP-ken belül kell lekezelni.
4

Köszönöm

aspirany · 2008. Júl. 14. (H), 12.10
Köszi világos, még egy kérdés:

erről már volt szó ebben a fórumban,csak hogy világos legyen.

lefut, ill a program a query részhez ér és ott lefagy elmegy az internet, leáll az adatbázis.

ha jól gondolom ilyenkor nincs gond mivel a COMMIT parancs nem hajtódik végre, ill a ROLLBACK értelmetlen (mert nincs adatbázis kapcsolat) és COMMIT hiányában nem fut le.
5

bombabiztos bunker :)

virág · 2008. Júl. 14. (H), 13.06
Igen, jól látod, viszont ne feledd, hogy a tranzakciókezelés egy bizonyos szint után bonyolulttá szokott válni, elég nagy szakirodalma van a különféle tranzakciós módszereknek, szinteknek (mi véd mi ellen, milyen esetekben mit érdemes használni, mikor kell a max. biztonságra és mikor a max. gyorsaságra és átjaárhatóságra törekedni és mikor kell a középút). Ebbe egészen szépen bele lehet bonyolódni, akár az őrületig is :) Az egyszerű webes fejlesztéseknél azonban ritkán fogsz olyan tranzakciókat látni mint pl. a bankoknál, illetve kívánom, hogy láss mert sokat lehet belőlük okulni :)