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
UPDATE
sats istället på den befintliga raden med vilkenINSERT
uttalande 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.