Portál AbcLinuxu, 15. července 2025 12:31
Zdravím zkušenější!
Jak se při programování v PHP řeší situace, kdy by k jedné větě v MySQL tabulce přistupovalo víc uživatelů najednou? Musí se to ošetřovat v PHP nebo se o to postará sám MySQL server?
Dosud jsem přístup k MySQL datům pomocí PHP zkoušel vždycky jako singl user, ale co kdybych chtěl jednoduchou evidenci osob naprogramovat tak, aby s ní mohlo pracovat najednou víc lidí?
Děkuju za rady nebo nasměrování.
J.Rok
K tomu slouží tzv. optimistický či pesimistický zámek.
Optimistický zámek používá verzování. Tabulka obsahuje navíc jeden sloupec s číslem, které se při káždém update inkrementuje.
Příklad pro editaci (optimistický lock):
Načte se uživatel, kterého edituji i s tímto sloupcem. Při ukládání je zpětně kontrolováno, zda v DB je stejné číslo. Pokud ano, záznam se uloží a číslo se zvýší o 1.
Druhý uživatel, který záznam otevřel ve stejnou dobu bude mít při uložení problém, protože dané číslo bude jiné.
Editace (pesimistický lock):
Načteš záznam s lock read. Toto lze zaručit u typu tabulek, které podporují transakci na úrovni řádku (viz. třeba InnoDB). Druhý uživatel, který by chtěl daný záznam otevřít bude mít problém, jelikož na něj již kouká jiný uživatel.
----------------------
Co se týče podpory v PHP, tak mám pocit, že žádná není. Možná na základě toho co jsem napsal prolést internet a dohledat nějaké řešení. Já to osobně používám Javu, kde tyto věci řeší třeba Hibernate, takže nedokážu řící jak je na tom samotná podpora v MySQL.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.