MySql visszatérési értékek SELECT FOR UPDATE és LOCK IN SHARE MODE használata esetén.
Sziasztok!
Azon agyaltam, hogy ha mysql-ben php-vel kiválasztok egy rekordot mert módosítani akarom (de más olvashassa a régi tartalmat módosítás alatt) LOCK IN SHARE MODE-ban és az már egy másik felhasználó által LOCK IN SHARE MODE-olva lett, akkor nekem hibaüzi jön arról hogy az most éppen foglalt?
Tehát:
$lekerdezes = mysql_query("SELECT mennyiseg FROM tabla WHERE id = '1' LOCK IN SHARE MODE");
Akkor a fent említett esetben a $lekerdezes = false?
Mert ugye ha ugyan arra a rekordra pályázunk, akkor a tranzakció sikeressége érdekében nem csak a változtatás végrehalytásának, általunk meghatározott kritériumokra megfelelőségét kell figyelni, hanem azt is, hogy a rekord kiválasztása után lesz-e egyáltalán lehetőségünk változtatni.
Konkrétan ez így helyes?Üdv, s_volenszki
■ Azon agyaltam, hogy ha mysql-ben php-vel kiválasztok egy rekordot mert módosítani akarom (de más olvashassa a régi tartalmat módosítás alatt) LOCK IN SHARE MODE-ban és az már egy másik felhasználó által LOCK IN SHARE MODE-olva lett, akkor nekem hibaüzi jön arról hogy az most éppen foglalt?
Tehát:
$lekerdezes = mysql_query("SELECT mennyiseg FROM tabla WHERE id = '1' LOCK IN SHARE MODE");
Akkor a fent említett esetben a $lekerdezes = false?
Mert ugye ha ugyan arra a rekordra pályázunk, akkor a tranzakció sikeressége érdekében nem csak a változtatás végrehalytásának, általunk meghatározott kritériumokra megfelelőségét kell figyelni, hanem azt is, hogy a rekord kiválasztása után lesz-e egyáltalán lehetőségünk változtatni.
Konkrétan ez így helyes?
- @mysql_query("BEGIN");
- $lekerdezes = mysql_query("SELECT mennyiseg FROM tabla WHERE id = '1' LOCK IN SHARE MODE");
- if($lekerdezes)
- {
- $mennyiseg = mysql_result($lekerdezes,0,'mennyiseg');
- $uj_mennyiseg = $mennyiseg - 5;
- if($uj_mennyiseg < 0)
- {
- @mysql_query("ROLLBACK");
- print "Nincs megfelelő mennyiség!";
- exit;
- }
- else
- {
- $modosit = mysql_query("UPDATE tabla SET mennyiseg = '$uj_mennyiseg' WHERE id = '1'");
- if($modosit)
- {
- @mysql_query("COMMIT");
- print "Adatok sikeresen módosítva!";
- }
- else
- {
- @mysql_query("ROLLBACK");
- print "Az adat módosítása sikertelen!";
- exit;
- }
- }
- }
- else
- {
- @mysql_query("ROLLBACK");
- print "A rekordot jelenleg nem lehet módosítani, próbálja újra!";
- }
Lehet hogy rosszul kérdeztem?
s_volenszki