Използвах ON DUPLICATE KEY UPDATE
много. В някои ситуации наистина си струва да използвате нестандартно SQL разширение.
Първо, трябва да се уверите, че имате уникално ключово ограничение. ON DUPLICATE KEY UPDATE
функцията се активира само ако е имало уникално нарушение на ключ.
Ето често използван формат:
$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)
означава "Актуализиране на колона 1 със стойността, която би била вмъкната, ако заявката не беше попаднала в нарушението на дублирания ключ." С други думи, това просто означава актуализиране на колона 1 до това, което би било, ако вмъкването работи.
Гледайки този код, не изглежда правилно, че актуализирате и трите колони, които се опитвате да вмъкнете. Коя от колоните има уникално ограничение за него?
РЕДАКТА
По принцип да се използва ON DUPLICATE KEY UPDATE
, вие просто пишете израза за вмъкване както обикновено, но добавяте ON DUPLICATE KEY UPDATE
клауза, прикрепена към края. Вярвам, че трябва да работи по следния начин:
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);
Отново една от колоните, които вмъквате, трябва да има уникален индекс (или комбинация от колоните). Това може да се дължи на факта, че един от тях е първичен ключ или защото в таблицата има уникален индекс.