Byłem ciekawy jak zachowują się skrypty PHP i MySQL? Skrypt to w zasadzie dwa zapytania SQL.Co się dzieje, gdy skrypt PHP uzyskuje dostęp do bazy danych MySQL w tym samym czasie, więcej niż raz?
Pierwsza WYBIERA i pobiera numer z kolumny określonego wiersza ustalonej przez jakiś identyfikator.
Następnie, jeśli liczba jest dodatnia, druga AKTUALIZUJE kolumnę, odejmując określoną kwotę.
Oczywiście jest to klasyczny przypadek, w którym będę używał transakcji lub blokady lub muteksów lub tego, co dalej.
Moje pytania to: na stronie internetowej jest całkowicie możliwe dla dwóch lub więcej użytkowników, aby wywołać skrypt w tym samym czasie w tym samym wierszu. Jeśli nie używasz transakcji lub blokowania tabel, jak PHP to przetworzy? Są to dwa zapytania/wywołania funkcji, ale są one w jednym skrypcie. Czy czeka cały skrypt, aby powrócić do odpowiadającego mu użytkownika, aby uruchomić go ponownie dla innego użytkownika, lub ponieważ są to różne zapytania z powodu pseudoparallelizmu, może uruchomić pierwsze zapytanie dla wielu użytkowników wywołujących ten sam skrypt, a następnie drugi dla innego zestawu.
Zasadniczo pytam, ponieważ robię coś, gdy nie mam wystarczających uprawnień do korzystania z transakcji lub zamków i chcę wiedzieć, czy mogę uniknąć muteksu (nie jestem pewien co do tego słowa, w zasadzie nowa tabela dla dzwoniących, przed wywołaniem powyższego skryptu wezwę nowy skrypt przed tym, w którym obrócę kolumnę boolowską tabeli, tak aby inni ludzie nie mogli przejść do oryginalnego skryptu, a potem do faksu, aby następny był zgodny może zrobić i tak dalej)
Edycja: Nie jestem pewien, czy wybrać aktualizację, czy uprawnienia do tego są zawarte w wyżej wymienionych. Faceta odpowiedzialnego za udzielanie odpowiedzi na moje pytania jest trudny do znalezienia, a ja miałem go ze sobą szukając ...
Tak, dostałem odpowiedź, że mogę zablokować stoły ... więc miałeś rację. Jeśli chodzi o P.S, to właśnie robię; za pomocą odniesienia na kolumnie (free = free - {$ diff}) –
Teraz wiem, że mogę użyć SELECT ... FOR UPDATE. Czy wiesz, jak to działa. Sposób, w jaki to zrozumiałem, blokuje wiersze wyniku (z kwerendy wyboru) zarówno dla odczytu (wybierz) i zapisu (aktualizacja), ale nie jestem pewien, kiedy je zwalnia ... Po następnej aktualizacji tych wierszy? –
SELECT ... FOR UPDATE działa tylko w transakcjach. Zablokuje wiersze do końca transakcji. – sectus