sql >> Databasteknik >  >> RDS >> Mysql

Kan jag använda ON DUPLICATE KEY UPDATE med en INSERT-fråga med alternativet SET?

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.



  1. T-SQL för att hitta redundanta index

  2. Skapa tabell i procedur

  3. Skapa ett Docker Swarm Cluster på Azure Container Service

  4. Funktion kontra lagrad procedur i SQL Server