MySQL – Slik setter du inn en ny rad bare hvis data ikke eksisterer

Mysql Slik Setter Du Inn En Ny Rad Bare Hvis Data Ikke Eksisterer



MySQL er en kjent åpen kildekode RDBMS for å lagre data i databaser. Å sette inn data i tabeller i databasen er en vanlig oppgave. Noen ganger ønsker ikke brukere å sette inn dupliserte data for å eliminere redundans. MySQL lar brukere sette inn data bare hvis lignende data ikke allerede eksisterer.

Dette innlegget vil diskutere å sette inn en ny rad bare hvis data ikke allerede finnes i MySQL-tabellen. Før du begynner med dette innlegget, sørg for at du er logget på din lokale MySQL-server og har valgt en database der du vil jobbe.

Sett inn en ny rad bare hvis data ikke eksisterer. Bruk 'INSERT IGNORE'-erklæringen

Vel, svaret på spørsmålet i tittelen er ganske enkelt og greit. Bare bruk ' SETT INN ' nøkkelord sammen med ' OVERSE ' Nøkkelord. Dette vil sørge for at de nye dataene eller innsettingsspørringen kun utføres når ingen tidligere oppføring av dataene er funnet i MySQL. For å få en kort oversikt over dette, ta en titt på følgende syntaks:







SETT INN OVERSE INN I [ bord - Navn ] ( [ kolonne 1 - Navn ] , [ kolonne 2 - Navn ] , [ kolonne 3 - Navn ] ) VERDIER ( [ verdi1 ] , [ verdi2 ] , [ verdi3 ] ) ;

La oss se et eksempel hvis brukeren vil angi en radverdi ' 1 ', ' John ' og ' Doe ' i ' Kunde ' tabell for kolonnene ' ID ,' ' Fornavn ' og ' Etternavn 'henholdsvis. Kjør denne spørringen for å sette inn disse verdiene hvis noen hvis ingen rad med disse verdiene allerede eksisterer:



PLUKKE UT * FRA Kunde;
SETT INN OVERSE INN I Kunde ( ID , Fornavn , Etternavn ) VERDIER ( 1 , 'John' , 'Doe' ) ;

Utdataene inneholder to tabeller som viser data fra tabellen før og etter utføring av spørringen. Du kan merke at ingenting endres i tabellen fordi raden allerede eksisterte, så MySQL har ignorert innsettingsprosessen uten å vise feilen:







Sett inn en ny rad bare hvis data ikke eksisterer ved å bruke 'WHERE NOT EXISTS'-klausulen

I MySQL er ' HVOR EKSISTERER IKKE ”-leddet forhindrer innsetting av rader hvis de allerede finnes i tabellen når den brukes i SETTE INN I ”-setning med en underspørring for å definere en betingelse. Når denne klausulen brukes med underspørringen ' (VELG * FRA [tabellnavn] [kolonnenavn]=[uttrykk]); ” sjekker om det finnes en rad i tabellen som oppfyller betingelsen. Hvis det finnes en rad, vil ' HVOR IKKE FINNES ' vil returnere en falsk verdi, og ' PLUKKE UT ”-setningen vil ikke returnere noen rader. Som et resultat vil raden ikke settes inn i tabellen. Syntaksen er gitt nedenfor:

SETT INN INN I [ bord - Navn ] ( [ kolonne 1 - Navn ] , [ kolonne 2 - Navn ] , [ kolonne 3 - Navn ] )
PLUKKE UT [ verdi1 ] , [ verdi2 ] , [ verdi3 ]
HVOR IKKE FINNES ( PLUKKE UT * FRA [ bord - Navn ] [ kolonne - Navn ] = [ uttrykk ] ) ;

La oss se et eksempel hvis brukeren ønsker å sette inn en rad i ansatttabellen som inneholder verdier ' 1 ', ' amerikansk ' og ' Henriot ' i kolonnene ' id ', ' Selskapsnavn ' og ' Kontakt navn 'henholdsvis. Men bare hvis en rad med en id på ' 1 ” finnes ikke i tabellen eller den finnes ikke. I det spesielle tilfellet vil spørringen bli:



PLUKKE UT * FRA ansatt;

SETT INN INN I ansatt ( id , Selskapsnavn , Kontakt navn )
PLUKKE UT 1 , 'Amerikansk' , 'Henriot'
HVOR IKKE FINNES ( PLUKKE UT * FRA ansatt HVOR id = 1 ) ;

Utgangen viser en ny rad som ikke er satt inn som raden med ' id ' lik ' 1 ' eksisterte allerede.

Sett inn en ny rad bare hvis data ikke eksisterer ved å bruke 'ON DUPLICATE KEY UPDATE'-klausulen

Vel, en annen måte er å bruke ' PÅ DUPLIKAT NØKKELOPPDATERING ” klausul i MySQL. Siden denne klausulen vil bli brukt med 'INSERT INTO'-spørringen og danner en 'hvis-else'-utførelse. Så dette betyr at dataene i tabellen bare vil bli oppdatert hvis de er unike. Ellers ville ingen endring skje. Den generelle syntaksen for dette er som følger:

SETT INN INN I [ bord - Navn ] ( [ kolonne 1 - Navn ] , [ kolonne 2 - Navn ] , [ kolonne 3 - Navn ] ) VERDIER ( [ verdi1 ] , [ verdi2 ] , [ verdi3 ] )
DUPLISERE NØKKEL OPPDATER [ kolonne 1 - Navn ] = [ kolonne 1 - Navn ] ;

La oss se et eksempel for å sette inn verdier i ' 2 ', ' Pascale ', ' Nixon ', ' London ', ' Storbritannia ' og «(171) 555-7788 ' i bordet ' Kunde ' for kolonnene ' ID ', ' Fornavn ', ' Etternavn ', ' by ', ' land ' og ' telefon 'henholdsvis. Hvis raden ikke eksisterer allerede, vil den bli satt inn. Ellers vil den oppdatere verdiene der ' Id=Id ” betingelsen oppfyller. Kjør denne spørringen:

PLUKKE UT * FRA Kunde ;
SETT INN INN I Kunde ( ID , Fornavn , Etternavn , by , land , telefon )
VERDIER ( 2 , 'Pascale' , 'Nixon' , 'London' , 'UK' , '(171) 555-7788' )
DUPLISERE NØKKEL OPPDATER ID = ID;

Dette er tabellen før du kjører spørringen, du kan se ' ID ' lik ' 2 ' eksisterer ikke:

Etter å ha kjørt spørringen, vil denne spørringen sette inn nye rader i tabellen:

Du har satt inn en ny rad, siden data ikke eksisterer før du kjører spørringen.

Konklusjon

I MySQL, sett inn en ny rad bare hvis data ikke allerede eksisterer ved å bruke ' SETT INN IGNORER ' uttalelse eller ' HVOR IKKE FINNES ' klausul i ' SETTE INN I ' uttalelse. En annen måte å gjøre dette på er å bruke ' PÅ DUPLIKAT NØKKELOPPDATERING ' klausul i ' SETTE INN I ”-setning for å oppdatere hvis raden allerede eksisterer. Ellers legger du til en ny rad. Innlegget diskuterte hvordan du setter inn en ny rad bare hvis data ikke eksisterer.