*grummel* ich hatte diesen Beitrag doch gestern beantwortet...
Moin!
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.
Am besten sagst du dir einfach, "das ist mir völlig Wurscht, interessiert mich nicht - soll sich die DB doch selbst drum kümmern."
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.
Tja, leider scheint auch diese Technik nicht für meine Problem geeignet, denn wie ich ein wenig weiter unten erklärte möchte ich, wenn es die id nicht gibt gerne den INSERT durchführen. Dann allerdings _ohne_ id-Angabe, also dem auto-increasement folgend. Das ist hier auch nicht möglich, ich mache einen INSERT und der wird ausgeführt, es sei denn der Datensatz mit der angegebenen id existiert, dann wird er aktualisiert.
Naja, wie auch immer, mir ist gestern eine Idee gekommen, wie ich das Problem möglichweise schon in PHP lösen kann (ich denke ich kann VORHER vorhersehen, ob ein Datensatz existiert oder nicht). Trotzdem vielein Dank für die Antworten euch beiden, ich habe wieder 'was gelernt, was ich bestimmt mal gebrauchen kann (ich sollte endlich mal (my)SQL erlernen).
Schönen Mittwoch noch.