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

Beitrag lesen

Moin!

Am besten sagst du dir einfach, "das ist mir völlig Wurscht, interessiert mich nicht - soll sich die DB doch selbst drum kümmern."

Richtige Idee, aber REPLACE ist einfach das falsche Statement dafür.

Besser: INSERT ... ON DUPLICATE KEY UPDATE ...

http://dev.mysql.com/doc/refman/4.1/en/insert-on-duplicate.html

Zerbeißt existierende auto_increment-Spalten nicht (wegen DELETE-INSERT-Abfolge bei REPLACE), und ist auch sonst deutlich handlungsflexibler, weil das UPDATE absolut nichts mit dem INSERT zu tun haben muß, bzw. komplett andere Dinge tun kann, beispielsweise statt dem INSERT eines neuen Datensatzes einen Zähler im bestehenden Datensatz hochzählen.

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.

- Sven Rautenberg

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