Duplikera och ignorera på MySQL-inlägg

MySQL-tabellens primära nycklar och unika index förhindrar att flera rader med samma index läggs till i tabellen. Om du försöker infoga en dubblett rad med ett standard INSERT-meddelande kommer du att stöta på ett fel och insatsen kommer att misslyckas.

MySQL ger flera alternativ till standardinställningen för INSERT och varje hanterar dubbla rader något annorlunda: "INSERT IGNORE", "INSERT ... ON DUPLICATE KEY UPDATE" och "REPLACE."

Primärtangenter och unika index

Primärnyckelindex och "UNIQUE" indexbegränsningar kräver att varje rad innehåller ett unikt värde i indexkolumnen, så att varje rad kan identifieras med sin primära nyckel eller värdet i UNIQUE index-begränsningskolonnen.

Om en normal INSERT försöker infoga en rad som innehåller ett dubblettervärde i primärnyckeln eller UNIQUE begränsningsindex, kommer inlägget att misslyckas, eventuellt rulla tillbaka hela transaktionen.

INSERT IGNORE

INSERT IGNORE kommer att infoga rader på samma sätt som INSERT, men med undantag för att det kommer att ignorera rader med dubbla värden och fortsätta exekvering utan att skapa ett fel. Varje rad som innehåller ett duplikatvärde kommer inte att införas. till exempel:

INSERT IGNORE IN i my_table (unique_index_column, other_column) VÄRDEN (1, "annat värde");

INSERT ... OM DUPLICERA NYCKEL UPPDATERING

INSERT ... På DUPLICATE KEY UPDATE kommer du att lägga in några icke-dubbla rader som vanligt. Men när det möter en dubblett rad, kommer den att göra en UPDATE på den ursprungliga raden; till exempel:

INSERT IN i my_table (unique_index_column, other_column) VÄRDER (1, "annat värde") PÅ DUPLICERA NYCKEL UPPDATERING other_column = 'duplicate update value';

BYTA UT

REPLACE fungerar på samma sätt som INSERT, förutom att när den stöter på en dubblett rad raderas den ursprungliga raden och fortsätter sedan med inlägget. Varje rad med ett dubbelt unikt indexvärde ersätter den rad som ursprungligen innehöll värdet. till exempel:

BYTE IN i my_table (unique_index_column, other_column) värden (1, "annat värde")

Populära Inlägg