Użyłem ON DUPLICATE KEY UPDATE
bardzo. W niektórych sytuacjach jest to niestandardowe rozszerzenie SQL, którego naprawdę warto użyć.
Najpierw musisz upewnić się, że masz unikalne ograniczenie klucza. ON DUPLICATE KEY UPDATE
funkcja uruchamia się tylko wtedy, gdy doszłoby do unikalnego naruszenia klucza.
Oto powszechnie używany 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)
oznacza „Zaktualizuj kolumnę 1 o wartość, która zostałaby wstawiona, gdyby zapytanie nie spowodowało naruszenia zduplikowanego klucza”. Innymi słowy, oznacza to po prostu aktualizację kolumny 1 do takiej, jaka byłaby, gdyby wstawka działała.
Patrząc na ten kod, nie wydaje się poprawne, że aktualizujesz wszystkie trzy kolumny, które próbujesz wstawić. Która z kolumn ma unikalne ograniczenie?
EDYCJA:Zmodyfikuj w oparciu o format „SET” instrukcji wstawiania mysql na pytanie z OP.
Zasadniczo, aby użyć ON DUPLICATE KEY UPDATE
, po prostu piszesz instrukcję insert jak zwykle, ale dodajesz ON DUPLICATE KEY UPDATE
klauzula przypięta na końcu. Uważam, że powinno działać tak:
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);
Ponownie, jedna z wstawianych kolumn musi mieć unikalny indeks (lub kombinację kolumn). Może to być spowodowane tym, że jeden z nich jest kluczem podstawowym lub ponieważ w tabeli znajduje się unikalny indeks.