Dette indlæg vil kun diskutere indsættelse af en ny række, hvis data ikke allerede findes i MySQL-tabellen. Før du begynder med dette indlæg, skal du sikre dig, at du er logget ind på din lokale MySQL-server og har valgt en database, hvor du vil arbejde.
Indsæt kun en ny række, hvis data ikke eksisterer ved at bruge 'INSERT IGNORE'-erklæringen
Nå, svaret på spørgsmålet i titlen er ret simpelt og ligetil. Du skal blot bruge ' INDSÆT ' søgeord sammen med ' IGNORERE 'Nøgleord. Dette vil sikre, at de nye data eller indsættelsesforespørgslen kun udføres, når der ikke findes nogen tidligere indtastning af data i MySQL. For at få et kort overblik over dette, tag et kig på følgende syntaks:
INDSÆT IGNORERE IND I [ bord - navn ] ( [ kolonne 1 - navn ] , [ kolonne 2 - navn ] , [ kolonne 3 - navn ] ) VÆRDIER ( [ værdi1 ] , [ værdi2 ] , [ værdi3 ] ) ;
Lad os se et eksempel, hvis brugeren ønsker at indtaste en rækkeværdi ' 1 ', ' John ' og ' Doe ' i ' Kunde ' tabel for kolonnerne ' Id ,' ' Fornavn ' og ' Efternavn ' henholdsvis. Kør denne forespørgsel for at indsætte disse værdier, hvis nogen, hvis der ikke allerede eksisterer en række med disse værdier:
VÆLG * FRA Kunde;
INDSÆT IGNORERE IND I Kunde ( Id , Fornavn , Efternavn ) VÆRDIER ( 1 , 'John' , 'Doe' ) ;
Outputtet indeholder to tabeller, der viser tabellens data før og efter udførelse af forespørgslen. Du kan bemærke, at intet ændrer sig i tabellen, fordi rækken allerede eksisterede, så MySQL har ignoreret indsættelsesprocessen uden at vise fejlen:
Indsæt kun en ny række, hvis data ikke eksisterer ved hjælp af 'WHERE NOT EXISTS'-klausulen
I MySQL er ' HVOR IKKE-EKSISTERENDE ”-klausul forhindrer indsættelse af rækker, hvis de allerede findes i tabellen, når den bruges i INDSÆT I ” sætning med en underforespørgsel for at definere en betingelse. Når denne klausul bruges med underforespørgslen ' (VÆLG * FRA [tabelnavn] [kolonnenavn]=[udtryk]); ” kontrollerer, om der findes en række i tabellen, der opfylder betingelsen. Hvis der findes en række, vil ' HVOR IKKE FINDER ” klausul returnerer en falsk værdi, og ” VÆLG ” erklæring vil ikke returnere nogen rækker. Som følge heraf vil rækken ikke blive indsat i tabellen. Syntaksen er angivet nedenfor:
INDSÆT IND I [ bord - navn ] ( [ kolonne 1 - navn ] , [ kolonne 2 - navn ] , [ kolonne 3 - navn ] )VÆLG [ værdi1 ] , [ værdi2 ] , [ værdi3 ]
HVOR IKKE EKSISTERER ( VÆLG * FRA [ bord - navn ] [ kolonne - navn ] = [ udtryk ] ) ;
Lad os se et eksempel, hvis brugeren ønsker at indsætte en række i medarbejdertabellen, der indeholder værdier ' 1 ', ' amerikansk ' og ' Henriot ' i kolonnerne ' id ', ' Firmanavn ' og ' Kontakt navn ' henholdsvis. Men kun hvis en række med et id på ' 1 ” findes ikke i tabellen, eller den findes ikke. I det særlige tilfælde bliver forespørgslen:
VÆLG * FRA medarbejder;
INDSÆT IND I medarbejder ( id , Firmanavn , Kontakt navn )
VÆLG 1 , 'Amerikansk' , 'Henriot'
HVOR IKKE EKSISTERER ( VÆLG * FRA medarbejder HVOR id = 1 ) ;
Outputtet viser en ny række, der ikke er indsat som rækken med ' id ' svarende til ' 1 ' allerede eksisterede.
Indsæt kun en ny række, hvis data ikke findes ved hjælp af 'ON DUPLICATE KEY UPDATE'-klausulen
Nå, en anden måde er at bruge ' PÅ DUBLIKAT NØGLOPDATERING ” klausul i MySQL. Da denne klausul vil blive brugt med 'INSERT INTO'-forespørgslen, der danner en 'hvis-else'-udførelse. Så det betyder, at dataene i tabellen kun vil blive opdateret, hvis de er unikke. Ellers ville der ikke ske nogen ændring. Den generelle syntaks for dette er som følger:
INDSÆT IND I [ bord - navn ] ( [ kolonne 1 - navn ] , [ kolonne 2 - navn ] , [ kolonne 3 - navn ] ) VÆRDIER ( [ værdi1 ] , [ værdi2 ] , [ værdi3 ] )PÅ DUPLIKERE NØGLE OPDATERING [ kolonne 1 - navn ] = [ kolonne 1 - navn ] ;
Lad os se et eksempel for at indsætte værdier i ' 2 ', ' Pascale ', ' Nixon ', ' London ', ' Storbritannien ” og “(171) 555-7788 ' i bordet ' Kunde ' for kolonnerne ' Id ', ' Fornavn ', ' Efternavn ', ' by ', ' Land ' og ' telefon ' henholdsvis. Hvis rækken ikke allerede eksisterer, vil den blive indsat. Ellers vil den opdatere værdierne, hvor ' Id=Id ” betingelse opfylder. Kør denne forespørgsel:
VÆLG * FRA Kunde ;INDSÆT IND I Kunde ( Id , Fornavn , Efternavn , by , Land , telefon )
VÆRDIER ( 2 , 'Pascale' , 'Nixon' , 'London' , 'UK' , '(171) 555-7788' )
PÅ DUPLIKERE NØGLE OPDATERING Id = Id;
Dette er tabellen før du kører forespørgslen, du kan se ' Id ' svarende til ' 2 ' eksisterer ikke:
Efter at have kørt forespørgslen, vil denne forespørgsel indsætte nye rækker i tabellen:
Du har indsat en ny række, da data ikke eksisterer, før du kører forespørgslen.
Konklusion
I MySQL skal du kun indsætte en ny række, hvis data ikke allerede eksisterer ved at bruge ' INDSÆT IGNORER ' udsagn eller ' HVOR IKKE FINDER ' klausul i ' INDSÆT I ' udmelding. En anden måde at gøre dette på er at bruge ' PÅ DUBLIKAT NØGLOPDATERING ' klausul i ' INDSÆT I ”-sætning for at opdatere, hvis rækken allerede eksisterer. Ellers skal du tilføje en ny række. Indlægget diskuterede, hvordan man kun indsætter en ny række, hvis data ikke eksisterer.