Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak sprawdzić, czy zmodyfikowano rekordy?
Forum PHP.pl > Forum > Bazy danych > MySQL
golab
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.
Crozin
1. Każda taka operacja zwraca ilość zmodyfikowanych rekordów: PDOStatement::rowCount()/PDO::exec().
2. Podstawy relacyjnych baz danych: transakcje
kipero
A dlaczego nie użyć po prostu:
  1. UPDATE tabela SET kasa = kasa - 100 WHERE kto = 1 AND kasa >= 100;

?
golab
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ść?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.