MySQL: INSERT mit UPDATE-Option

Seit der Version 4.1 kennt MySQL die mächtige Erweiterung ON DUPLICATE

KEY für den Befehl INSERT. Die führt statt des Einfügens eine UPDATE-Operationen durch, falls bereits ein Satz mit dem identischen Primärschlüssel existiert.

Ein Beispiel für die Anwendung: Sie möchten sich für Ihre Website eine Tabelle anlegen, die die Zugriffszahlen auf Basis von IP-Adressen speichert. Das könnte beispielsweise nützlich sein, um “Sauger” zu identifizieren, also User, die mit Hilfe von Skripten in kurzer Zeit alle Seiten Ihres Webs abgrasen, um sie zu verwerten. Die könnten Sie mit Hilfe der gespeicherten Informationen sperren oder wenigstens ausbremsen.

Die Struktur der Tabelle wird in etwa so aussehen:

CREATE TABLE zugriffe (

ip VARCHAR(15) NOT NULL PRIMARY KEY,

zaehler INT UNSIGNED NOT NULL, lzugriff DATETIME

);

Um einen neuen Zugriff zu vermerken, würde man mit den normalen SQL-Befehlen zuerst eine Abfrage starten, die das Vorhandensein der IP-Adresse prüft und dann je nach ihrem Ergebnis die Daten per UPDATE aktualisieren oder mittels INSERT neu eintragen.

Mit dem praktischen Befehlszusatz dagegen genügt ein MySQL-Befehl:

INSERT INTO zugriffe VALUES (‘192.168.0.1’, 1, now( ))

ON DUPLICATE KEY UPDATE zaehler = zaehler +1,lzugriff = now( );

Für den Fall, dass die IP-Adresse 192.168.0.1 bereits in der Tabelle eingetragen ist, wird also der Zähler um eins erhöht und das Feld, das den letzten Zugriff speichert, aktualisiert.

Ähnliche Beiträge