INSERT INTO … ON DUPLICATE KEY UPDATE
werkt op deze manier:
- het probeert zoals gewoonlijk een rij in te voegen
- als er een beperkingsschending in een kolom optreedt, wordt de
UPDATE
. uitgevoerd statement in plaats daarvan op de bestaande rij waarmee deINSERT
verklaring botste
Dat betekent simpelweg dat als de UPDATE
statement alleen zou succesvol zijn, het is ON DUPLICATE KEY UPDATE
equivalent zal ook werken. Dat betekent dat je uiteraard geen beperkingen in de UPDATE
. kunt schenden statement, of het hele ding zal mislukken (bijvoorbeeld proberen een waarde in te stellen op een UNIQUE
kolom die al in een andere rij bestaat).
Als u dezelfde waarde opnieuw in dezelfde kolom instelt, is dat in wezen een no-op. De waarde in de kolom verandert niet en kan daarom ook geen fouten veroorzaken (laten we aannemen dat je geen echt funky hebt BEFORE UPDATE
triggers die zich kunnen misdragen). Het aantal kolommen is hier niet relevant, u kunt zoveel of zo weinig kolommen in één verklaring wijzigen als u wilt.