MySQL – Sådan indsætter du kun en ny række, hvis data ikke eksisterer

Mysql Sadan Indsaetter Du Kun En Ny Raekke Hvis Data Ikke Eksisterer



MySQL er en berømt open source RDBMS til at gemme data i databaser. Det er en almindelig opgave at indsætte data i tabeller i din database. Nogle gange ønsker brugere ikke at indsætte duplikerede data for at eliminere redundans. MySQL tillader kun brugere at indsætte data, hvis lignende data ikke allerede eksisterer.

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