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 ] )PÅ 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' )
PÅ 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.