Wieder nicht sicher über diesen letzten Teil mit dem “Update”.
Wrikken
Nun, das ist alt. Aber natürlich müssen Sie nur einen Wert angeben einmalgibt es keinen Grund, es ein zweites Mal in die Abfrage einzufügen (was praktisch für mehrere Einfügungen oder vorbereitete Anweisungen ist):
INSERT INTO table1
(col1, col2, col3, col4)
VALUES
('val1', 'val2', 'val3', 'val4')
ON DUPLICATE KEY UPDATE
col2=VALUES(col2),
col3=VALUES(col3) [,...]
Was den Vorteil hat, dass es immer noch für eine mehrfache Einfügeanweisung funktioniert:
Dies ist die beste Antwort. Verwenden Sie einfach die Funktionalität von MySQL, die mehrere Einfügungen unterstützt
– Ali Alwash
17. Januar 2018 um 15:27 Uhr
Ohne ein Komma danach geht das nicht col2=VALUES(col2).
– würdig
12. April 2018 um 13:21 Uhr
@wortwart Behoben 🙂
– 472084
29. August 2018 um 7:39 Uhr
Dies sollte ganz oben sein. Kurz, prägnant und anhand von Beispielen leicht verständlich. Wusste bis jetzt nicht einmal, dass wir Werte nach Spalten-/Feldnamen referenzieren können.
– Chris
1. März 2020 um 20:45 Uhr
sathia
INSERT INTO table1
(`col1`, `col2`, `col3`, `col4`)
VALUES
('val1', 'val2', 'val3', 'val4')
ON DUPLICATE KEY UPDATE
`col2`='val2',
`col3`='val3', [...]
Ich habe Ihre Anführungszeichen und Markierungen korrigiert.
Siehe mein Update, das ist innerhalb des PHP-Skripts, daher die Syntax. Ich würde mich freuen, wenn Sie jetzt einen Blick darauf werfen könnten. Danke
– Lucy Weatherford
24. Januar 2012 um 18:26 Uhr
Sie können keine Teilstriche für Werte verwenden, diese sind für die Verwendung mit Spaltennamen gedacht. Verwenden Sie die Syntax, die ich in meiner Antwort gezeigt habe. es wird klappen.
Der übersichtlichen Syntax wegen gibt es noch eine andere Syntaxform;
INSERT INTO `table1` SET `id`=$id,
`col2`='$col2',
`col3`='$col3'[, ...]
ON DUPLICATE KEY UPDATE `col2`='$col2',
`col4`='$col4'[, ...]
Beispiel;
INSERT INTO customers SET cid=10,
createdon=NOW(),
createdby='user',
cname="Steve"
ON DUPLICATE KEY UPDATE modifiedon=NOW(),
modifiedby='user',
cname="Steve";
Wenn es keinen Kunden mit ID=10 in der Datenbank gibt, wird er erstellt und die Spalten cid, createdon, createdby, cname werden gesetzt. Wenn es existiert, wird es aktualisiert und die Spalten modifyon, modifydbym, cname werden aktualisiert.
ANMERKUNG 1: WENN Sie hier für den Primärschlüssel cid=0 eingeben, wird AUTO_INCREMENT ausgelöst (natürlich, wenn die pk-Spalte als AUTO_INCREMENT definiert ist) und ein Datensatz wird eingefügt!
ANMERKUNG 2: ON DUPLICATE KEY UPDATE aktualisiert den vorhandenen PK-ID-Eintrag. Es wird aber auch aktualisiert, wenn DUPLICATE für eine UNIQUE KEY-Spalte erstellt wird. Wenn Sie beispielsweise definiert haben, dass die cname-Spalte EINZIGARTIG ist, führt das Speichern eines bereits vorhandenen Datensatzes mit cname=”Steve” zu einem UPDATE dieses Datensatzes (nicht zu einem neuen INSERT). Achten Sie darauf, da Sie erwarten können, dass DB einen Fehler für die Verletzung der UNIQUE KEY-Einschränkung zurückgibt, was hier nicht passieren wird.
Deine Anfrage scheint richtig zu sein. Hier ist mein Beispiel für diese Art von Abfrage:
warum ist das zweite onList notwendig hinein onList=onList+'.$data['onList'].? ist es nicht genug zu haben onList=$data['onList']? oder in meinem Beispiel: col2='$val2'?
– Lucy Weatherford
24. Januar 2012 um 22:38 Uhr
Was er tut, ist etwas anders, er fügt $data hinzu[‘onList’] zum onList-Feldwert.
– sathia
24. Januar 2012 um 22:46 Uhr
warum ist das zweite onList notwendig hinein onList=onList+'.$data['onList'].? ist es nicht genug zu haben onList=$data['onList']? oder in meinem Beispiel: col2='$val2'?
– Lucy Weatherford
24. Januar 2012 um 22:38 Uhr
Was er tut, ist etwas anders, er fügt $data hinzu[‘onList’] zum onList-Feldwert.
– sathia
24. Januar 2012 um 22:46 Uhr
11796000cookie-checkBei doppelter Schlüsselaktualisierung – mehrere Spaltenyes