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