Sven Rautenberg: mysql_affected_rows - erfolgreich-sinnloses UPDATE zählt nicht.

Beitrag lesen

Moin!

Und atomar ist das Statement auch noch (das aber genauso, wie REPLACE) - also tausendmal besser, als die jetzige Lösung von KraKi, bei der es ja durchaus sein kann, dass zwei Prozesse parallel feststellen, dass UPDATE erfolglos war, und dann beide gemeinsam zum INSERT schreiten.

Nein, da hast du dich verlesen. In dem oben stehenden Code fehlen zwar zwei else-Anweisungen (ist mir später aufgefallen), aber es gibt niemals zwei INSERTs. Das Problem ist ja, dass es ein erfolgreiches UPDATE+INSERT gibt, aber niemals UPDATE+INSERT+INSERT und auch nicht INSERT+INSERT. Wie gesagt, da musst du dich verlesen haben.

Du hast meinen Einwurf nicht verstanden.

Wenn dein EINER PHP-Code ein UPDATE plus ggf. INSERT macht - was passiert dann, wenn dieser eine Code parallel von zwei Browsern aufgerufen wird?

Genau, es werden mindestens zwei UPDATES gemacht, und je nachdem, wie jeweils die Datenbank reagiert, eventuell auch noch zwei INSERTS.

Hängt nur davon ab, zu welchen Zeitpunkten das jeweils geschieht.

Und deshalb gibts eben sowas wie Transaktionen, mit denen man mehrere SQL-Statements zu einem zusammenfassen kann, damit zwei parallele Prozesse sich nicht gegenseitig ins Gehege kommen.

- Sven Rautenberg

--
"Love your nation - respect the others."