![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 15.03.2013 Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam przykładowe zapytanie:
UPDATE tabela SET kasa=if(kasa<100,kasa,kasa-100) WHERE kto=1 Chodzi o to, aby w tabeli odjąć 100 zł, jeśli ktoś posiada więcej pieniędzy niż 100 zł. Warunków będzie więcej i kod będzie bardziej skomplikowany. Dlatego potrzebuję wiedzieć czy w chwili wykonywania instrukcji UPDATE ktoś miał więcej czy mniej niż 100 zł. Mogę zrobić to dwoma instrukcjami: UPDATE... SELECT... I w ten sposób sprawdzić, czy stan konta się zmienił. Ale jeśli w ciągu sekundy wykonywanych będzie 1000 operacji z różnych źródeł i wtedy pomiędzy UPDATE... a SELECT... wartość kasy może się już zmienić (przynajmniej mi się tak wydaje, że to możliwe). Jak uzyskać jakąś informację zwrotną korzystając z jednego polecenia? Moje pytania to: 1. Czy jeśli wykonam dwa polecenia w jednym zapytaniu "UPDATE...; SELECT..." to pomiędzy UPDATE a SELECT, w tej tysięcznej części sekundy, ktoś inny może zmodyfikować tabelę? 2. Czy istnieje jakiś bardziej elegancki sposób, aby uzyskać informacje w PHP z funkcji UPDATE, czy element został zmieniony? pozdr. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Każda taka operacja zwraca ilość zmodyfikowanych rekordów: PDOStatement::rowCount()/PDO::exec().
2. Podstawy relacyjnych baz danych: transakcje |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 50 Dołączył: 28.10.2006 Skąd: Radom Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 15.03.2013 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki! Nakierowaliście mnie na właściwy trop.
jeszcze raz ja. Zdecydowałem się na użycie polecenia START TRANSACTION .... COMMIT Próbuję użyć go w funkcji, lecz wyskakuje mi komunikat "#1422 - Explicit or implicit commit is not allowed in stored function or trigger." dlaczego mogę użyć START TRANSACTION a nie mogę COMMIT? Jak mogę to obejść? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 14:44 |