INSERT INTO … ON DUPLICATE KEY UPDATE fungerar så här:
- den försöker infoga en rad som vanligt
- om någon överträdelse av begränsningar inträffar i någon kolumn, kör den
UPDATEsats istället på den befintliga raden med vilkenINSERTuttalande krockade
Det betyder helt enkelt om UPDATE enbart uttalandet skulle vara framgångsrikt, dess ON DUPLICATE KEY UPDATE motsvarande kommer också att fungera. Det betyder att du uppenbarligen inte kan bryta mot några begränsningar i UPDATE sats antingen, eller så misslyckas det hela (t.ex. att försöka ställa in ett värde på en UNIQUE kolumn som redan finns i en annan rad).
Om du ställer in samma värde på samma kolumn igen, är det i princip en no-op. Värdet i kolumnen ändras inte och kan därför inte heller orsaka några fel (låt oss anta att du inte har några riktigt snygga BEFORE UPDATE triggers som kan fungera fel). Antalet kolumner är irrelevant här, du kan ändra så många eller så få i ett påstående som du vill.