Jag har använt ON DUPLICATE KEY UPDATE
mycket. För vissa situationer är det icke-standardiserade SQL-tillägg som verkligen är värt att använda.
Först måste du se till att du har en unik nyckelbegränsning på plats. ON DUPLICATE KEY UPDATE
Funktionen startar bara om det skulle ha varit ett unikt nyckelbrott.
Här är ett vanligt format:
$query = "INSERT INTO $table (column1, column2, column3)
VALUES ('value-1', 'value-2', 'value-3')
ON DUPLICATE KEY UPDATE
column1 = values(column1),
column2 = values(column2),
column3 = values(column3);"
column1 = values(column1)
betyder "Uppdatera kolumn1 med värdet som skulle ha infogats om frågan inte hade träffat dubblettnyckeln." Med andra ord betyder det bara att uppdatera kolumn 1 till vad den skulle ha varit om infogningen fungerat.
När du tittar på den här koden verkar det inte korrekt att du uppdaterar alla tre kolumnerna du försöker infoga. Vilken av kolumnerna har en unik begränsning?
EDIT:Ändra baserat på 'SET'-formatet för mysql insert-satsen enligt frågan från OP.
I grund och botten att använda ON DUPLICATE KEY UPDATE
, du skriver bara insert-satsen som vanligt, men lägg till ON DUPLICATE KEY UPDATE
klausul klistrad på slutet. Jag tror att det borde fungera så här:
INSERT INTO $table
set column1 = 'value-1',
column2 = 'value-2',
column3 = 'value-3'
ON DUPLICATE KEY UPDATE
column1 = values(column1),
column2 = values(column2),
column3 = values(column3);
Återigen, en av kolumnerna du infogar måste ha ett unikt index (eller en kombination av kolumnerna). Det kan bero på att en av dem är den primära nyckeln eller för att det finns ett unikt index på bordet.