sql, wenn vorhanden update sonst insert funktioniert nicht
ich habe eine Tabelle mit 3 generischen keys, die auch die Fremdschlüssel. Dies ist meine Abfrage --
IF (EXISTS(SELECT * FROM table1 WHERE col_1 =4))
BEGIN
UPDATE table1
SET col_2 = 3,
col_3 = 100
WHERE col_1 = 4
END
ELSE
BEGIN
INSERT INTO table1
(col_1, col_2, col_3)
VALUES(4, 2, 27)
END
Gibt mir einen syntax-Fehler. Engine InnoDB. Sortierung: utf8_swedish_ci
Habe ich versucht, diese zu --
INSERT INTO table1
(col1, col2, col3)
VALUES
(:val1, :val2, :val3)
ON DUPLICATE KEY UPDATE
col2=:val2,
col3=:val3
Diese nicht richtig funktioniert und nur die Zeilen einfügen, trotz, dass doppelte Schlüssel.
Warum gehst du nicht einfach tun, eine
ich habe es ausprobiert, aber es funktioniert nicht. Dokumente, die sagte, es wird zu Fehlern in Anwesenheit von mehreren Schlüsseln
in mysql gibt es eine
Warum verwenden Sie Zeichen für die Vergleiche, aber Zahl für das einfügen? Was ist der Typ der Spalten? Anmerkung, es sei denn, Sie führen diese in eine Transaktion (und die gesamte Tabelle sperren), können Sie sich ein paar komische Ergebnisse.
Datentypen, die nicht ein Problem. Ich habe editiert, um Verwirrung zu vermeiden.
INSERT
mit ON DUPLICATE KEY UPDATE
?ich habe es ausprobiert, aber es funktioniert nicht. Dokumente, die sagte, es wird zu Fehlern in Anwesenheit von mehreren Schlüsseln
in mysql gibt es eine
replace
. Sie können diese nutzen,Warum verwenden Sie Zeichen für die Vergleiche, aber Zahl für das einfügen? Was ist der Typ der Spalten? Anmerkung, es sei denn, Sie führen diese in eine Transaktion (und die gesamte Tabelle sperren), können Sie sich ein paar komische Ergebnisse.
Datentypen, die nicht ein Problem. Ich habe editiert, um Verwirrung zu vermeiden.
InformationsquelleAutor user983983 | 2014-01-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
Sie können
*
statt 1, aber für performance nicht verwenden*
. Beide funktionieren gleichWarum denkst du, das wird das problem lösen, wenn
*
funktionieren sollte?Für diese Angelegenheit, wo sind Sie immer
assignment_question
? Erscheint dies noch immer werfen die gleichen syntax-Fehler, sowieso.InformationsquelleAutor Saharsh Shah
Können Sie versuchen, den folgenden code als eine alternative an, falls vorhanden
Hoffe, das hilft.
InformationsquelleAutor Ajay Chauhan
In der Regel für Szenarien, wo Sie wollen : auf "aktualisieren/löschen Sie einen bestehenden Datensatz, sofern vorhanden, oder fügen Sie eine neue Zeile, wenn der Datensatz existiert nicht" , können Sie MERGE-Befehl von Oracle.
Link : https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_9016.htm
PSB-hier am Beispiel von Oracle:
InformationsquelleAutor Jayesh Mulwani
Probleme:
END IF
für jedenIF
Anweisung;mysql
so nach Dokumentation:InformationsquelleAutor avarice
versuchen Sie DANN, bevor Sie BEGINNEN
auch versuchen, am ENDE, WENN nach der letzten Zeile
hoffen, dass diese Arbeit :
InformationsquelleAutor Rahmat Ihsan