sql >> Databasteknik >  >> RDS >> Mysql

PÅ DUBLIKATKEY + AUTO ÖKNING utfärda mysql

Detta beteende är dokumenterat (stycke inom parentes):

Om du anger ON DUPLICATE KEY UPDATE och en rad infogas som skulle orsaka ett duplikatvärde i ett UNIKT index eller PRIMÄR KEY, utför MySQL en UPPDATERING av den gamla raden. Till exempel, om kolumn a deklareras som UNIQUE och innehåller värdet 1, har följande två påståenden liknande effekt:

    INSERT INTO table (a,b,c) VALUES (1,2,3)   ON DUPLICATE KEY UPDATE c=c+1;

    UPDATE table SET c=c+1 WHERE a=1;

(Effekterna är inte identiska för InnoDB-tabellen där a är en kolumn för automatisk inkrement. Med en kolumn för automatisk inkrement ökar en INSERT-sats värdet för automatisk inkrement men UPDATE gör det inte.)

Här är en enkel förklaring. MySQL försöker göra insättningen först. Det är då id:t ökas automatiskt. När den har ökat stannar den. Då upptäcks dubbletten och uppdateringen sker. Men värdet missas.

Du bör inte vara beroende av auto_increment utan luckor. Om det är ett krav är omkostnaden för uppdateringar och inlägg mycket större. I huvudsak måste du sätta ett lås på hela bordet och numrera om allt som behöver numreras om, vanligtvis med en trigger. En bättre lösning är att beräkna inkrementella värden på utdata.



  1. Hur man döljer resultatuppsättningens dekoration i Psql-utgång

  2. SQL datumformat

  3. PostgreSQL-agent i SQL Standard Committee igen

  4. Lägg till ledande och efterföljande nollor i SQL Server