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

Beitrag lesen

Hello,

Wenn ich das richtig sehe, dann halte ich deine Vorgehensweise für bedenklich: Du lässt also die Datenbank überprüfen, ob ein bestimmtes Datum in ein bestimmtes Feld passt? Ist es nicht besser, im Vorfeld zu prüfen, ob die Eingabedaten i.O. sind? Ich hoffe, ich irre mich da (bei der ersten Frage; bei der zweiten hoffentlich nicht). Oder welche Fälle gibt es da noch, dass einzelne Insert nicht funktionieren, die ich nicht schon durch das IGNORE ausgeschlossen habe?

Selbstverständlich ist eine vernünftige Datenbank auch in der Lage eine einfache oder eine strenge Typprüfung vorzunehmen. Hier handelt es sich aber erstens um eine SQL-Schnittstelle und zweitens um MySQL. Die SQL-Schnittstelle kann nur Textdaten verarbeiten und solche, die als Textdaten maskiert sind. Eine Typüberprüfung durch die Datenbank kann also nicht vorgenommen werden, sondern bestenfalls eine Formatkontrolle. MySQL ist nur ein "Rumpfsystem", auch wenn das DBMS schon sehr an Funktionsumfang und Sicherheit gewonnen hat, ist es immer noch kein "vollwertiges" DBMS nach dem Stand der Technik. Für einfache Internet-Dialog-Anwendungen genügt es aber.

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

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

  • die Tabelle ist gesperrt

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

  • ...

  • (Update) der Satz wurde seit dem letzten Lesen von einem anderen User verändert

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.

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?

Harzliche Grüße aus http://www.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau