Mi van, ha elszáll a MySQL tranzakció közben
A rendszer amit fejlesztek több ponton használ tranzakció kezelést.
A kérdésem az lenne, hogy mekkora az esélye annak, hogy éppen a tranzakció kellős közepén száll el (lesz elérhetetlen) a MySQL szerver?
Ilyenkor mi történik a tranzakcióval, lévén, hogy sem a COMMIT, sem a ROLLBACK parancs nem kerül kiadásra?
■ A kérdésem az lenne, hogy mekkora az esélye annak, hogy éppen a tranzakció kellős közepén száll el (lesz elérhetetlen) a MySQL szerver?
Ilyenkor mi történik a tranzakcióval, lévén, hogy sem a COMMIT, sem a ROLLBACK parancs nem kerül kiadásra?
szerintem...
php + mysql tapasztalatok alapján:
A mysql tranzakció kezeléssel én is csak nem rég ismerkedtem meg, és az én véleményem a következő:
Nekem ez úgy működik, hogy van egy $globalResult változóm ami alapértelmezetten true. Elindítom a tranzakciót, és minden adatbázis műveletet figyelek hogy az eredménye true-e. Ha nem, $globalResult = false; meg még egy hibakódot is adok neki (egy másik változónak), hogy tudjam, a folyamatok közül hol akadtam fenn.
Ha minden lefutott ellenőrzésre kerül a $globalResult változó, és ha true akkor commit.
Na már most a te teóriád szerint megszakad a kapcsolat az adatbázis szerverrel, ezért valamelyik művelet eredménye képen a $globalResult false lesz, aminek a következménye a végén a rollback.
Ebben az esetben, ha csak a mysql pusztul ki, attól még a szerver oldali progrmnyelv lefutattja a teljes parancssorozatot, tehét a rollback megvalósul.
Az más kérdés, hogy mi történik akkor, ha az apache dob egy hátast, mert ugye akkor nem marad senki aki elemzné az adatbázis kapcsolatból származó adatokat, de pont ezért szinte 100% biztos, hogy nem történik változás. Valószínüleg marad egy töredék ideiglenes tábla az előkészített adatokkal és a mysql szerver idővel kikukázza.
Valami ilyesmit gondolok, ha nem így van, hallgassuk mit mondanak az okosabbak! :)
s_volenszki
Próba
Az, hogy a MySQL mit csinál nemtudom, de úgy logikus, hogy újraindítás után nyom egy rollback-et.
Szerintem végetelenül egyszerű kipróbálni az első műveletek után nyomsz egy sleep-et php-ban és kihúzod a gépet a konnektorból :)
ACID
Üdv,
Felhő
Exception
Az mondjuk más kérédés, hogy érdemes-e pconnectelni, talán nagyon ritkán van olyan feladat, ahol hasznos, de a legtöbb esetben a sima connect jobb megoldás lehet pont az ilyen anomáliák miatt.
PDO
Hogyan tudom megnézni, van-e nekem ilyen extensönöm? Mert a próbakód azt mondja: Class 'PDO' not found. Ezt kizárólag telepíteni lehet, vagy működi úgy is mint a PhpMailer osztály, hogy include-olom?
s_volenszki
hátha segít
http://weblabor.hu/blog/20040521/pdo
hátha segít :)
Igen, segített.
Köszike, s_volenszki
Kipróbálva ...
És valóban, ha megszakítom a kapcsolatot a tranzakció közepén, akkor nem történik változás a DB-ben ...