MySQL – Einfügen bei vorhandenen Datensätzen / INSERT IGNORE

25. Mai 2010  |  Kommentar schreiben   |  Tags: , , ,



Bei Facebook teilen

Heute werden wir die Schwierigkeiten beim Einfügen von Datensätzen via MySQL betrachten. Der bekannte Befehl “INSERT INTO” kann oft fehlschlagen aufgrund von bereits mit der einzufügenden ID vorhandenen Datensätzen. Es gibt drei Wege dies zu vermeiden, beziehungsweise solche Fälle direkt mit MySQL abzufangen um automatisierte INSERTs nicht abbrechen zu lassen. Diese Beispiele sind bei der Programmierung besonders nützlich, wenn wir nicht in der Lage sind, vor jedem Einfügen mit PHP oder ähnliches zu überprüfen, ob der Datensatz bereits existiert. Das spart insgesamt bei der MySQL Befehlen Zeit.

Es gibt drei Wege die MySQL Queries so auszuführen, so dass man sich nicht mehr Gedanken machen muss, ob Fehler bei dem Einfügen auftreten:

MySQL: REPLACE INTO

Wenn Sie eine Abfrage dieser Art ausführen,

REPLACE INTO table SET id=3454,a='1', b='2'

wird ein vorhandener Datensatz überschrieben. Das ist nicht besonders gut, wenn wir die Daten einfach behalten wollen und die Abfrage den vorhandenen Datensatz ignorieren lassen wollen. Hiermit verlieren Sie die Daten, die Sie schon mal in der Datenbank hatten.

MySQL: INSERT IGNORE

Einfacher ist es mit INSERT IGNORE:

INSERT IGNORE INTO table SET id=3454,a='1', b='2'

Sollte hier ein Datensatz mit dieser ID existieren, so wird die Ausführung der Abfrage einfach ignoriert und überschritten (d.h. es geht dann zu der nächsten Abfrage). Wenn der Datensatz nicht vorliegt, wird ein neuer Datensatz angelegt. Das funktioniert ganz gut in den meisten Fällen. Jedoch können hier weitere MySQL Fehler auftreten, die sich nicht auf die bereits vorhandene ID beziehen, die die Ausführung der Abfrage trotzdem nicht verhindern werden. Es kann sein, dass man bei solchen Fehlern die Ausführung abbrechen lassen möchte. Deswegen gibt es die elegantere Lösung:

MySQL: INSERT … ON DUPLICATE KEY UPDATE …

INSERT INTO table SET id=3454,a='1', b='2' ON DUPLICATE KEY UPDATE ....

Bei diesem Fall wird die Abfrage nur ignoriert, wenn ein vorhandener Datensatz vorliegt. Alle weiteren Fehler, die auftreten könnten, werden sämtliche Abfragen abbrechen lassen. Der ”….” Abschnitt sollte ein MySQL Befehl enthalten, der keine Auswirkung auf die Daten haben wird, wie etwa UPDATE id=id.

Teilen

Hinterlasse eine Antwort

Du musst angemeldet sein, um einen Kommentar abzugeben.