Dupliser og ignorér på MySQL-innlegg

MySQL-tabellens primære nøkler og unike indekser hindrer flere rader med samme indeks fra å bli lagt til tabellen. Hvis du prøver å sette inn en duplikatrad med en standard INSERT-setning, møter du en feil og innsatsen vil mislykkes.

MySQL gir flere alternativer til standard INSERT-setningen, og hver håndterer dupliserte rader litt annerledes: "INSERT IGNORE, " "INSERT ... ON DUPLICATE KEY UPDATE" og "REPLACE."

Primærnøkler og unike indekser

Primærnøkkelindekser og "UNIKKE" indeksbegrensninger krever at hver rad inneholder en unik verdi i indekskolonnen (e), slik at hver rad kan identifiseres med sin primære nøkkel eller verdien i UNIQUE indeksbegrensningskolonnen / -ene.

Hvis en normal INSERT forsøker å sette inn en rad som inneholder en duplikatverdi i primærnøkkelen eller UNIQUE begrensningsindeksen, vil innsatsen mislykkes, muligens ruller tilbake hele transaksjonen.

INSERT IGNORE

INSERT IGNORE vil sette inn rader på samme måte som INSERT, men med unntak av at det vil ignorere rader med dupliserte verdier og fortsette kjøringen uten å opprette en feil. En hvilken som helst rad som inneholder en duplikatverdi, blir ikke satt inn. for eksempel:

INSERT IGNORE IN my_table (unique_index_column, other_column) VALUES (1, 'annen verdi');

INSERT ... OM DUPLIKATE KEY UPDATE

INSERT ... PÅ DUPLICATE KEY UPDATE vil sette inn noen ikke-dupliserte rader som normalt. Men når den møter en duplisert rad, vil den utføre en UPDATE på den opprinnelige raden; for eksempel:

INSERT TIL my_table (unique_index_column, other_column) VÆRDIER (1, 'annen verdi') PÅ DUPLICER KEY UPDATE other_column = 'duplikat oppdateringsverdi';

ERSTATTE

REPLACE fungerer på samme måte som INSERT, bortsett fra at når den møter en duplisert rad, sletter den den opprinnelige raden og fortsetter deretter med innsatsen. En hvilken som helst rad med en duplikat unikt indeksverdi erstatter raden som opprinnelig inneholdt verdien; for eksempel:

SKIFT I my_table (unique_index_column, other_column) VÆRDIER (1, 'annen verdi')

Populære Innlegg