MySQL herausfinden ob INSERT oder UPDATE
Hallo...
Ich versuch da etwas in MySQL zu Realisiern und hoffe auf eure Hilfe.
Ich möchte Daten (als beispiel a=1, b=2, c=3) in eine Tabelle schreiben aber es soll vorher (zb mit einer art IF anweisung) geprüft werden, ob es bereits einen Datensatz gibt, bei dem a=1 und b=2 . wenn ja dann soll in diesem Datensatz nur c mit UPDATE aktualisiert werden, wenn er nicht existiert soll er mit INSERT angelegt werden.
mit REPLACE kann ich glaub ich nicht arbeiten da ja a und b stimmen müssen werden
wie das ganze mit hilfe von php funktionieren würde weiß ich - ich brauch es aber in sql
ist das überhaupt möglich und wenn ja bin ich für jede hilfe dankbar
lg
condor
Ich versuch da etwas in MySQL zu Realisiern und hoffe auf eure Hilfe.
Ich möchte Daten (als beispiel a=1, b=2, c=3) in eine Tabelle schreiben aber es soll vorher (zb mit einer art IF anweisung) geprüft werden, ob es bereits einen Datensatz gibt, bei dem a=1 und b=2 . wenn ja dann soll in diesem Datensatz nur c mit UPDATE aktualisiert werden, wenn er nicht existiert soll er mit INSERT angelegt werden.
mit REPLACE kann ich glaub ich nicht arbeiten da ja a und b stimmen müssen werden
wie das ganze mit hilfe von php funktionieren würde weiß ich - ich brauch es aber in sql
ist das überhaupt möglich und wenn ja bin ich für jede hilfe dankbar
lg
condor
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 77589
Url: https://administrator.de/contentid/77589
Ausgedruckt am: 22.11.2024 um 14:11 Uhr
7 Kommentare
Neuester Kommentar
Moin,
welche Version von MySQL wird denn benutzt?
Ggfs. kanst Du das mit Stored Procedures abbilden, siehe http://dev.mysql.com/doc/refman/5.1/en/create-procedure.html
welche Version von MySQL wird denn benutzt?
Ggfs. kanst Du das mit Stored Procedures abbilden, siehe http://dev.mysql.com/doc/refman/5.1/en/create-procedure.html
Hi,
wie wär's mit einem Trigger auf die Tabelle?
Hier kannst du bei INSERT prüfen, ob es diesen Satz bereits gibt und ihn ggf. updaten.
Desweiteren wäre ein Unique-Constraint auf deine Spalten A und B sinnvoll.
Dann hast du bereits gesichert, dass es A und B nicht gleich sein können innerhalb deiner Tabelle.
In deinem Fall könnte die auch die MERGE-Anweisung helfen.
Hier kannst du dein Logik zum Einfügen abbilden.
Genaue Syntax für MySQL hab' ich nicht im Kopf
aber Google hilft da bestimmt
greetz,
pi
wie wär's mit einem Trigger auf die Tabelle?
Hier kannst du bei INSERT prüfen, ob es diesen Satz bereits gibt und ihn ggf. updaten.
Desweiteren wäre ein Unique-Constraint auf deine Spalten A und B sinnvoll.
Dann hast du bereits gesichert, dass es A und B nicht gleich sein können innerhalb deiner Tabelle.
In deinem Fall könnte die auch die MERGE-Anweisung helfen.
Hier kannst du dein Logik zum Einfügen abbilden.
Genaue Syntax für MySQL hab' ich nicht im Kopf
aber Google hilft da bestimmt
greetz,
pi
Wenn du dein Unique-Constraint auf mehrere Spalten anlegst,
sind alle Möglichkeiten dieser Spalten eindeutig.
UC auf Spalte A:
UC auf Spalten A+B:
UC auf Spalten A+B+C:
Es ist also genau das möglich, was du willst - wenn ich dich richtig verstanden habe .
Ich schau mal, ob ich ein Bespiel für Merge in MySQL finde..
so long,
pi
sind alle Möglichkeiten dieser Spalten eindeutig.
UC auf Spalte A:
A B C
1 0 0
1 0 0 <-- nicht möglich
A B C
1 0 0
1 1 0
0 1 0
0 1 1 <-- nicht möglich
A B C
1 0 0
1 0 1
1 1 1
1 1 0 ...
1 1 0 <-- nicht möglich
Es ist also genau das möglich, was du willst - wenn ich dich richtig verstanden habe .
Ich schau mal, ob ich ein Bespiel für Merge in MySQL finde..
so long,
pi
Habe noch eine weitere Möglichkeit gefunden: ON DUPLICATE KEY UPDATE
http://dev.mysql.com/doc/refman/5.1/de/insert-on-duplicate.html
Du muss dazu allerdings deine Spalten A und B als PK oder Unique deklarieren.
Merge ist im SQL2003-Standard deklariert:
Habe ein bisschen probiert, aber es nicht mit der gleichen Tabelle geschafft, dass da was vernünftiges rauskommt.
Also: verwende ON DUPLICATE KEY UPDATE
greetz,
pi
http://dev.mysql.com/doc/refman/5.1/de/insert-on-duplicate.html
Du muss dazu allerdings deine Spalten A und B als PK oder Unique deklarieren.
Merge ist im SQL2003-Standard deklariert:
MERGE INTO table_name USING table_name ON (condition)
WHEN MATCHED THEN UPDATE SET column1 = value1 [, column2 = value2 ...]
WHEN NOT MATCHED THEN INSERT column1 [, column2 ...] VALUES (value1 [, value2 ...])
Habe ein bisschen probiert, aber es nicht mit der gleichen Tabelle geschafft, dass da was vernünftiges rauskommt.
Also: verwende ON DUPLICATE KEY UPDATE
greetz,
pi