Zamykanie riadkov pri update

Prosím, pomoc
Potrebovala by som poradiť, ako uzamknúť riadky v tabuľke pri updatovaní,
aby nebolo možné ani čítanie.
Robím totiž update a môže sa stať, že iný proces číta tabuľku práve v tom momente, ale než sa vyhodnotí dotaz už nie je pravda to čo som načítala.

Našla som jedine toto: http://www.pcsvet.cz/art/article.php?id=177 Ale to je na moje vedomosti príliš stručné ;-)

Poprípade by mi stačilo zistiť či už je daný Update vykonaný, aby som mohla spustiť ďaľší beh programu. Ak dám if tak ešte nemusí byť a ak dám while, tak sa mi to nezdá kvôli zbytočnému čítaniu z DB. Určite existujú nejaké výstupné správy mysql_query, nie len chybové, ale nikde nič nemôžem nájsť.

Budem vďačná za akúkoľvek radu, alebo odkaz na nejakú stránku, ktorá mi pomôže.
tohleto souvisí s něčím, čemu se říká transakce. Tzn. začnu transakci udělám update ukončím transakci.
Pokud někdo čte ten samý záznam, který obnovuju, tak čte původní data do doby, kdy neproběhne ukončení transakce. (tohle pochopitelně platí i pro více jak jeden update).
Ale je tu problém. Tzv transaction save storage engine MyISAM určitě není. takže při návrhu tabulek je třeba na tohle pamatovat a použít InnoDB, BDB, or NDB Cluster engine - jak praví manuál. Jinak viz http://www.webzdarma.cz/forum/read.php?f=5&i=5979&t=5876
Marek: Vážim si tvoju snahu mi poradiť, ale asi, teda určite, som oveľa väčšia lama ako si si myslel, lebo som nepochopila čo má tá transakcia spoločné z uzamknutím záznamu v tabuľke na čítanie.

Ja potrebujem aby sa počas tejto doby nedal záznam ani čítať! Alebo potrebujem vedieť že sa transakcia úspešne ukončila a až potom sa spustil ďaľší beh programu. Nejaký výpis z DB že update skončil úspešne a ja budem môcť v phpku vypísať: "Váš čas bol zapísaný do DB"

Teraz to robím tak že odošlem mysql_query (update) a vypíšem echo "Váš čas bol zapísaný do DB" , ale pritom ani netuším či je to pravda :-(

Asi nestačí testovať či nebola chyba, že pretože kým tá chyba nenastane tak sa ani neupdatuje. Ale snáď existuje nejaká iná hláška. Alebo nie?
oprava: Asi nestačí testovať či nebola chyba, že pretože kým tá chyba nenastane tak sa ani neupdatuje 'tá chybová hláška'. (som myslela :)
hmm, omlouvam se, ale asi jsem te trochu zmatl. Myslel jsem na uplne jine veci. Zkus se podivat na http://dev.mysql.com/doc/refman/4.1/en/lock-tables.html
Tak sa v tom snažím zorientovať a uvažujem, že ak zamknem celú table tak za 1. to nie je bohviečo, keď potrebujem zamknúť len jeden riadok
2. dám update a následne unlock - už si môžem byť istá že je update vykonaný?

Ak som dobre pochopila tak MySQL sa v používaní správ správa ako Unix a teda že žiadna správa dobrá správa :-(

Inak celkom dobrá stránka, už sa v nej prehrabávam, snáď z nej môj mozog lamy niečo vydoluje ;-) Dík
1. zamknuti cele tabulky neni, pravda, na prvni pohled uplne dobry napad, ale tabulka se da zamknout ve vice rezimech. Zamykani jednotlivych radku nemuzes chtit po nejjednodussim SQL enginu, co se pouziva. Navic mam pocit, ze jsem cetl, ze zamykani jednotlivych radku se provadi automaticky pro update a delete.

2. pokud provedes update, muzes se podivat jestli vse probehlo ok, nebo doslo k chybe, taky muzes zkotrolovat, kolik radku update ovlivnil.

> Ak som dobre pochopila tak MySQL sa v používaní správ správa ako Unix a teda že žiadna správa dobrá správa :-(
to jsem moc nepochopil. Kdyz nedostanes zadnou zpravu, tak je asi vse OK, ne? Navic dostanes navratovy kod (teda v UNIXech), to ze ho nepouzivas neznamena, ze tam neni. BTW, ktery system to dela lip?

A jeste: u explicitniho zamykani tabulek bacha na deadlocky...
njn, teoreticky to všetko som už niekde počula (asi v škole ;-) ale asi sa s tým zamykaním nebudem zaoberať, skúsim to s tými správami. Ak vravíš, že na "Unixech jsou" tak by mali byť aj na WZ, nie? Ale ako sa k nim dostať?

Inak už som to vyriešila úplne inak ;-) Obišla som to celé jednou fintou vo Flashi, celá aplikácia totiž beží vo Flashi. Ale nie je na škodu si trochu rozšíriť obzory. Díky.
>1. zamknuti cele tabulky neni, pravda, na prvni pohled uplne dobry napad
proc? dotaz trva nanejvys setiny sekundy, tak nevidim duvod, proc klidne nezamknout tu tabulku.

>Navic dostanes navratovy kod (teda v UNIXech)
php se na platforme windows a linux sice (dalo by se rict mirne) lisi - v nekterych funkcich, treba chown, chmod atd., ale zrovna v oblasti navratovych hodnot bych rozdily opravdu nevidel.

> Ale ako sa k nim dostať?
jednoduse. Funkci (tedy jeji vysledek) priradis k nejake promenne. Napriklad: $vysledek = mysql_query("SELECT 1+1");
a do $vysledek se ti ulozi navratova hodnota pouzite funkce. Podle manualu je datoveho typu resource, tedy v praxi to, co z nej zjistis, je (mimojine), zda dotaz probehl-nebyla vracena hodnota false (0) (tedy byl spravne napsan). Pokud ne, tak po mysql_query volas funkci mysql_error(), ktera vraci popis chyby u posledniho dotazu vykonaneho v mysql_query. Obdobne funkce mysql_errno() vraci cislo chyby. Priklad:

$result = mysql_query("SELECT chybny_dotaz FROM tabulka WGERE 1=1";

// v dotazu je preklep - WGERE misto WHERE, je tedy syntakticky spatne

if (!$result) // pokud dotaz NEPROBEHL - tedy nas pripad
{
// vrati cislo a popis chyby tak, jak to tvrdi MySQL.
echo "<b>Chyba MySQL #".mysql_errno().":</b> ".mysql_error();
}
// pokud zadna chyba nebyla hlasena, vypise, kolik radku bylo dotazem ovlivneno.
else echo "Dotaz probehl uspesne, bylo ovlivneno ".mysql_affected_rows()." radku.";
Díky donny. To je to čo som potrebovala, už to je aj odladené, šlape to jak hodinky. klop klop ;-)
donny, k 1. jsem psal "na první pohled"... :-)
A dokonce se to dá sepsat dohromady

if ($result = mysql_query("SELECT chybny_dotaz FROM tabulka WGERE 1=1") {
//úspěch
}else {
//neúspěch
}