Copying sources and texts (also in parts) for publishing without our permission is NOT ALLOWED. We are fed up with finding our work on other sites (like stackoverflow).
Das Kopieren von Quellcode und Texten (auch in Auszügen) ist nicht erlaubt. Wir haben es gründlich satt, unsere Arbeit auf anderen Webseiten zu finden.

Copying for non-public usage is allowed.           Das private Kopieren und Benutzen ist natürlich erlaubt und erwünscht.
07. Mrz 2010
Teaser

mySQL: Update if exists else insert record (SQL statement)

Wenn Sie einen Datensatz in eine Datenbanktabelle einfügen möchten (wenn er noch nicht existiert) oder diesen updaten möchten (wenn er existiert), hilft dieser SQL Befehl:

INSERT INTO table (fields) VALUES (values) ON DUPLICATE KEY UPDATE field = value

Dieses Statement prüft, ob der Primary Key (PK) für den einzufügenden Datensatz bereits besteht, nutzt dann ein Update Befehl und ansonsten Ihren angegeben Insert Befehl.

Beispiel

Wir haben eine Tabelle “Test” mit den Feldern “A”, “B” (je vom Typ varchar) und “C” (integer). Die Felder “A” und “B” sind unser PK.

Ein normales SQL Insert Statement in die leere Tabelle:

insert into Test (A,B,C) values ('Testtext A1','Texttext B1', 110);
insert into Test (A,B,C) values ('Testtext A2','Texttext B2', 250);

Danach stehen folgende Daten in der Tabelle “Test”:

A B C
Testtext A1 Texttext B1 110
Testtext A2 Texttext B2 250

Nun möchten wir einen weiteren Datensatz einfügen. Werden unter dem PK Daten gefunden, sollen diese überschrieben (aktualisiert) werden – ansonsten wird der Datensatz normal eingefügt:

insert into Test (A,B,C) values ('Testtext A2','Texttext B2', 285) 
    ON DUPLICATE KEY UPDATE C = 285;
INSERT into Test (A,B,C) values ('Testtext A3','Texttext B3', 310) 
    ON DUPLICATE KEY UPDATE C = 310;

Jetzt sieht der Inhalt der Tabelle “Test” wie folgt aus:

A B C
Testtext A1 Texttext B1 110
Testtext A2 Texttext B2 285
Testtext A3 Texttext B3 310

Die roten Texte sind im Gegensatz zur ersten Ansicht verändert.

insert into Test (A,B,C) values (‘Testtext A2′,’Texttext B2’, 285) ON DUPLICATE KEY UPDATE C = 28

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

fünf + elf =