Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy mogę użyć ON DUPLICATE KEY UPDATE z zapytaniem INSERT przy użyciu opcji SET?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Multi_Curl z wartościami z kolumny mysql

  2. przydziel plik tylko do jednej bazy danych

  3. Zapytanie Laravel, aby uzyskać wyniki zawierające co najmniej jeden element tablicy?

  4. Mysql 1 losowy wiersz

  5. Plik danych ładowania MySQL - akceleracja?