PHP MYSQL / PHP Race Conditions

komischefrage schrieb:
Hab leider keine Erfahrung mit PostgreSQL. Bin Mit PHP und MySql "aufgewachsen".
Aber zurück zu dem Thema "Race Conditions".

Theoretisch würde es doch reichen wenn ich die Tabelle während ein UPDATE läuft "locke" also sperre.

HTML:
SELECT * FROM openGames WHERE gameStatus = 0 FOR UPDATE LIMIT 1

Würde ich damit die komplette Tabelle sperren?
Oder würde ich hiermit nur die Einzelne Row sperren?

Wenn die Row gesperrt ist und der GameStatus noch nicht auf 1 gesetzt sein sollte, kann dann eine andere Connection diese trotzdem SELECTEN? :freak:

NACHTRAG: Okey wenn ich den Artikel richtig verstanden haben sollte,
sollte ein einfaches FOR UPDATE das Problem beheben. Oder :D ?

Ein FOR UPDATE sollte funktionieren, wenn das UPDATE statement in der gleichen Transaktion ist. Ich bin hier nur irritiert da du nur ein statement aufgelistet hast, und FOR UPDATE hat keinen Effekt für ein einzelnes Statement.
 
HTML:
SELECT * FROM openGames WHERE gameStatus = 0 FOR UPDATE LIMIT 1
HTML:
UPDATE openGames SET gameStatus=1, userId1=1337 WHERE id =1337

Wir würde ich den die UPDATE Query in die selbe Transaktion packen?
 
Zurück
Oben