sql >> Databasteknik >  >> RDS >> Mysql

INFOGA I ... PÅ DUBLIKAT UPPDATERA alla värden

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 vilken INSERT 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.




  1. Hibernate Named Query - gå med i 3 bord

  2. Använda index, använda temporärt, använda filesort - hur fixar man detta?

  3. En översikt över de olika skanningsmetoderna i PostgreSQL

  4. Hur verifierar jag att sqlplus kan ansluta?