2016-11-09 2 views
0

Ich habe keine Kontrolle über die SQL-Abfrage.Einfügen oder Aktualisieren basierend auf Primärschlüssel

INSERT INTO table (id, name, age) VALUES(1, "A", 19) 

Änderung sollte in der mysql-Server-Seite vorgenommen werden. Gibt es eine Einstellung, die aktiviert werden kann, um dies zu erreichen? ? (ohne die Einfügeabfrage ändern zu müssen) ID ist der Primärschlüssel.

INSERT INTO table (id, name, age) VALUES(1, "B", 20) 

Obige Abfrage sollte die 1, A, 19 Zeile zu 1, B, 20.

+0

Es ist keine Einstellung zum Ausführen von UPSERT verfügbar. Sie müssen die Abfrage ändern. – Viki888

+1

@ viki888 - wo hast du das, dass es keine solche "Einstellung" gibt? Es heißt 'ON DUPLICATE KEY UPDATE'. Bitte stellen Sie kein falsches Wissen zur Verfügung, wenn Sie sich selbst nicht sicher sind. – Mjh

+0

@Mjh In seiner Frage sagte er, dass er keine Kontrolle über SQL-Abfrage hat und er wollte, dass es durch eine Einstellung im Tabellenschema erreicht wird. – Viki888

Antwort

0

Dies kann durch geringfügige Änderung der Syntax der Abfrage erreicht werden. Einige DB unterstützt dies. Ich fand dies im Internet muss mit MySql verifizieren.

INSERT INTO table 
(id, name, age) 
VALUES(1, "A", 19) 
ON DUPLICATE KEY UPDATE 
name = "B", age = 20; 

In Postgres heißt es upsert.

0

MySQL unterstützt ON DUPLICATE KEY UPDATE. Dies erfordert eine Änderung der Abfrage. Ich würde vorschlagen, dies als zu schreiben:

INSERT INTO table (id, name, age) 
    VALUES(1, 'B', 20) 
    ON DUPLICATE KEY UPDATE name = VALUES(name), age = VALUES(age); 

Dies setzt voraus, dass id erklärte ein Primärschlüssel oder zumindest unique zu sein.

Die Funktion VALUES ist eine praktische Methode, um die neuen Werte aus einzufügenden Zeilen zu ziehen.

+0

Das bedeutet, es kann nicht auf mysql serverseite richtig gemacht werden? –

+0

@ AsiriLiyanaArachchi. . . In anderen Datenbanken könnten Sie einen Trigger verwenden. Ich denke nicht, dass dies in MySQL funktionieren würde, da es "statt" -Trigger nicht unterstützt. –

Verwandte Themen