dedlfix: (mysql+php) doppelte Einträge vermeiden

Beitrag lesen

Guten Morgen!

Nun zur Frage, warum trotz passenden Datenformates Inserts schiefgehen könnten:

Im konkurrierenden Betrieb ist es nicht ausgeschlossen, dass einzelne Sätze betroffen sind;
Beispiele:

  • ein anderer User hat den Satz mit den entsprechenden Kriterien bereits eingestellt

Deswegen ja ein INSERT IGNORE. Wenn der Datensatz schon drinsteht brauche ich ihn ja nicht noch einmal einzufügen (das ist natürlich vom konrekten Einzelfall abhängig). Ob ich auf die Information, dass der Datensatz bereits enthalten war oder nicht verzichten kann oder nicht, ist hier ja das Kriterium ob ich INSERT IGNORE einsetzen kann oder nicht.

  • ein anderer User hält den Satz gesperrt (natürlich nicht bei Insert...)

eben, das war ja auch nicht meine Fragestellung.

  • die Tabelle ist gesperrt

Dann geht ja gar nichts, nicht nur einer von einem Multi-Insert.

  • es hat einen Übertragungsfehler gegeben (oder im Satzformat liegt ein Fehler vor)

Übertragungsfehler kann man durch geeignete Maßnahmen ausschließen. Das ist kein spezielles Problem bei INSERT IGNORE

Es gibt dutzende von Gründen, warum eine Datenbankoperation nicht wunschgemäß oder erwartungsgemäß ausgeführt werden kann. Die Missachtung der Statusmeldung direkt nach der Operation ist das Verwerfliche, dass Du mindestns befriedigend "bedenken" solltest.

Das ist mir global gesehen völlig klar, das habe ich auch nicht bestritten. Ich dachte nur, wir reden hier speziell über Multi-Inserts mit INSERT IGNORE.

Außerdem ist eine "Fehlermeldung" nichts schlimmes, sondern gibt einem wertvolle Information über den Stand der Verarbeitung.
Warum sollte ich also diese Fähigkeit der Datenbank redundant, umständlich und fehlerträchtig (--> race conditions) emulieren?

Um solche allgemeinen Sachen geht es mir doch gar nicht...

Ich seh schon, ich kann dich nicht davon überzeugen, dass INSERT IGNORE nichts generell Schlechtes ist, sondern dass im jeweiligen Einzelfall seine Eigenschaften betrachtet und entsprechend bewertet werden müssen.

P.S. Mein Kollege sagt immer: "Wer Recht hat, gibt einen aus." In dem Sinne, Prost!   c(_)  :-)