MySQL - Hvordan sette inn en ny rad bare hvis data ikke eksisterer

MySQL - Hvordan sette inn en ny rad bare hvis data ikke eksisterer
MySQL er en kjent open source RDBMS for å lagre data i databaser. Å sette inn data i tabeller i databasen din 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 eksisterer allerede i MySQL -tabellen. Før du begynner med dette innlegget, må du forsikre deg om at du er logget inn på MySQL Local Server og har valgt en database der du vil jobbe.

Sett inn en ny rad bare hvis data ikke eksisterer ved hjelp av "Sett inn ignorering" -uttalelsen "

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

Sett inn ignorering i [tabellnavn] ([Column1-Name], [Column2-Name], [Column3-Name]) Verdier ([Value1], [Value2], [Value3]);

La oss se et eksempel hvis brukeren ønsker å oppgi en radverdi "1”,“John”Og“Doe”I“Kunde”Tabell for kolonnene”Id,""Fornavn”Og“EtternavnHenholdsvis. Kjør denne spørringen for å sette inn disse verdiene hvis noen hvis ingen rad har disse verdiene eksisterer allerede:

Velg * fra kunde;
Sett inn ignorering i kunde (ID, FirstName, LastName) verdier (1, 'John', 'doe');

Utgangen inneholder to tabeller som viser data fra tabellen før og etter utførelse av spørringen. Du kan merke at ingenting endrer seg 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 hjelp av "hvor ikke eksisterer" -klausulen

I mysql, "HVOR EKSISTERER IKKE”Klausul forhindrer innsetting av rader hvis de allerede eksisterer i tabellen når den brukes i“Sett inn i”Uttalelse med et underlag for å definere en tilstand. Når denne klausulen brukes med subquery “(Velg * fra [tabell-navn] [kolonnenavn] = [uttrykk]);”Sjekker om det finnes en rad i tabellen som oppfyller tilstanden. Hvis det eksisterer en rad, "Der det ikke eksisterer”-Bestemmelsen vil returnere en falsk verdi, og“PLUKKE UT”Uttalelsen vil ikke returnere noen rader. Som et resultat vil ikke raden bli satt inn i tabellen. Syntaksen er gitt nedenfor:

Sett inn i [tabellnavn] ([kolonne1-navn], [Column2-Name], [Column3-Name])
Velg [Value1], [Value2], [Value3]
Hvor det ikke eksisterer (velg * fra [tabell-navn] [kolonne-navn] = [uttrykk]);

La oss se et eksempel hvis brukeren ønsker å sette inn en rad i ansattstabellen som inneholder verdier "1”,“Americanas”Og“Henriot”I kolonnene“id”,“Selskapsnavn”Og“Kontakt navnHenholdsvis. Men bare hvis en rad med en ID av "1”Finnes ikke i tabellen, eller det er ikke eksisterende. I det aktuelle tilfellet vil spørringen bli:

Velg * fra ansatt;
Sett inn i ansatt (ID, CompanyName, ContactName)
Velg 1, 'Americanas', 'Henriot'
Hvor det ikke eksisterer (velg * fra ansatt der ID = 1);

Utgangen viser en ny rad som ikke er satt inn som rad med "id" lik "1”Eksisterte allerede.

Sett inn en ny rad bare hvis data ikke eksisterer ved hjelp av "On duplicate Key Update" -klausulen

Vel, en annen måte er å bruke “På duplikat nøkkeloppdatering”Klausul i MySQL. Ettersom denne klausulen vil bli brukt med "sett inn i" -spørsmålet som danner en "if-elv" -utførelse. Så dette betyr at dataene i tabellen bare vil bli oppdatert hvis de er unike. Ellers ville ingen endring oppstå. Den generelle syntaksen for dette er som følger:

Sett inn i [tabell-navn] ([kolonne1-navn], [kolonne2-navn], [Column3-Name]) Verdier ([Value1], [Value2], [Value3])
På duplikat nøkkeloppdatering [kolonne1-navn] = [kolonne1-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“TelefonHenholdsvis. Hvis raden ikke allerede eksisterer, vil den bli satt inn. Ellers vil den oppdatere verdiene der "Id = id”Tilstand møtes. Kjør denne spørringen:

Velg * fra kunde;
Sett inn kunde (ID, FirstName, LastName, City, Country, Phone)
Verdier (2, 'Pascale', 'Nixon', 'London', 'UK', '(171) 555-7788')
På duplikat nøkkeloppdatering 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, ettersom data ikke eksisterer før du kjører spørringen.

Konklusjon

I MySQL, sett inn en ny rad bare hvis data ikke eksisterer allerede ved å bruke "Sett inn ignorering”Uttalelse eller“Der det ikke eksisterer”Klausul i“Sett inn i”Uttalelse. En annen måte å gjøre dette på er å bruke "På duplikat nøkkeloppdatering”Klausul i“Sett inn i”Uttalelse for å oppdatere hvis raden allerede eksisterer. Ellers legger du til en ny rad. Innlegget diskuterte hvordan du bare setter inn en ny rad hvis data ikke eksisterer.