MySQL MariaDB

MySQL Insert Ignorer duplikatnøgle

MySQL Insert Ignorer duplikatnøgle
Der er ofte modstridende data i tabeller eller resultatsæt. Det er også tidskrævende at rette, og gentagne poster skal ofte undgås. Det er nødvendigt at identificere duplikatposter og slette dem fra begge tabeller. Dette afsnit vil uddybe, hvordan man undgår, at duplikatdata vises i en tabel, og hvordan man fjerner aktuelle duplikatposter. I denne vejledning lærer du, hvordan du bruger INSERT IGNORE-klausulen for at undgå fejlen.

Syntaks:

Her er syntaksen for INSERT IGNORE-forespørgslen.

>> INDSÆT IGNORER TIL tabelnavn (col1, col2, col3) VÆRDIER (value_list), (value_list), (value_list);

INDSÆT IGNORE via Workbench:

Åbn din MySQL Workbench 8.0 fra dit system og tilslut det til databaseinstansen.

I kommandoområdet skal du oprette en tabel "Medarbejder" med fire kolonner, hvor en af ​​dem skal angives som "UNIK". Prøv nedenstående forespørgsel i navigatorens forespørgselsområde for at oprette denne tabel. Vælg hele forespørgslen, og klik på flashtegnet for at udføre den.

>> OPRET TABEL Medarbejder (ID int PRIMÆR NØGLE IKKE NULL, Navn varchar (50) IKKE NULL, Alder Varchar (50), Lønvarchar (50), UNIK (ID));

Efter oprettelsen kan du finde tabellen "medarbejder" i listen under indstillingen "Tabeller" under databasen "data".

I gittervisningen kan du indtaste poster uden at skrive nogen forespørgsel. Så åbn gittervisningen for tabel "medarbejder" og tilføj nogle poster i den som vist nedenfor. Vi har indtastet alle de unikke poster uden dubletter. Tryk på knappen 'Anvend' for at anvende ændringerne.

Et nyt vindue åbnes med de relevante forespørgsler relateret til de poster, vi har indtastet ovenfor. Denne skærm kan kaldes en “Review” skærm. Hvis du vil ændre noget, kan du gøre det her. Ellers skal du trykke på knappen Anvend for at udføre forespørgslerne.

Som du kan se, er forespørgslen udført med succes, og poster gemmes i databasen og dens tabel "Medarbejder". Det ville have genereret en fejl, hvis vi havde tilføjet en duplikatværdi i kolonnen "ID". Tryk på knappen "Afslut".

Dette handlede kun om gittervisningen. Nu indsætter vi poster via forespørgselsområdet. I mellemtiden har vi indsat dobbelte poster denne gang for at kontrollere output. Så vi har prøvet nedenstående "INSERT" -forespørgsel, hvor vi har to lister med værdier. Begge lister over værdier har den samme værdi i kolonnen 'ID'. Vælg forespørgslen og tryk på flashtegnet for at udføre forespørgslen.

Forespørgslen fungerer ikke korrekt, og den genererer en fejl på grund af de duplikerede værdier i INSERT-kommandoen som vist i billedet.

Prøv nu den samme ovenstående forespørgsel med INSERT IGNORE-klausulen, og udfør den som præsenteret.

Du kan se, at det ikke genererer en fejl i outputområdet, men det giver en advarsel om, at kommandoen indeholder duplikerede værdier.

Opdater gittervisningen i tabellen "Medarbejder". INSERT IGNORE-forespørgslen har fungeret halvt. Den indsatte den første liste over værdier i tabellen, men den anden liste over værdier blev ignoreret på grund af den gentagne værdi "13".

INDSÆT IGNORE via kommandolinjeskal:

For at forstå dette koncept, lad os åbne MySQL-kommandolinjeklientshallen i dit system. Når du spørger, skal du skrive din MySQL-adgangskode for at begynde at arbejde på den.

Nu er det tid til at oprette en tabel. Prøv nedenstående kommando for at gøre det. Vi har oprettet en tabel med navnet 'minister', mens en af ​​dens kolonner har en UNIK begrænsning. Det er klart, at kolonnen "ID" kun accepterer de unikke værdier og ikke de duplikerede værdier.

>> Opret TABEL-data.minister (Mid INT PRIMÆR NØGLE UNIK IKKE NULL, Navn VARCHAR (45), By VARCHAR (45));

Forespørgslen fungerer korrekt, og tabellen er oprettet. For at forstå INSERT IGNORE-klausulen skal du først se den enkle INSERT-kommando, der fungerer. Hvis du bruger INSERT-kommandoen til at indsætte flere informationsdata i en tabel, suspenderer MySQL transaktionen og genererer en undtagelse, hvis der opstår en fejl under hele behandlingen. Som en konsekvens har tabellen ikke tilføjet nogen rækker til den. Lad os indsætte den første post i tabellen "minister" ved hjælp af nedenstående forespørgsel. Forespørgslen fungerer med succes, fordi tabellen i øjeblikket er tom, og der ikke er nogen post, der skal modsvares af.

Da kolonnen "ID" er UNIK, vil vi generere en fejl, når vi prøver nedenstående instruktion på kommandolinjeskallen. Dette skyldes, at vi har tilføjet værdien “11” i den forrige forespørgsel, og på grund af UNIQUE-nøglen tillader det os ikke at tilføje den gentagne værdi igen.

Derfor kan vi ved kontrol af tabellen se, at tabellen kun har 1 post tilføjet af den første INSERT-forespørgsel.

>> VÆLG * FRA data.minister;

Omvendt, hvis du bruger INSERT IGNORE-klausulen, overses de forkerte datarækker, der udløser fejlen, og indtaster kun de nøjagtige. I kommandoen nedenfor har vi brugt kommandoen INDSÆT IGNORE for at undgå at tilføje gentagne værdier i tabellen og overse fejlen. Som du kan se, har den første liste over værdier en duplikatværdi "11", der er den samme som i den forrige forespørgsel. Mens den anden liste over værdier er unik, viser den 1 post indsat i tabellen, som er den anden liste over værdier. MySQL indikerer også, at kun 1 post er indsat, og der genereres 1 advarsel i meddelelsen. Du kan derefter antage, at hvis vi bruger INSERT IGNORE-klausulen, giver MySQL en advarsel.

Som du kan se fra nedenstående output, har vi kun to poster i denne tabel - den første liste over værdier, der er angivet i ovenstående forespørgsel, som overses.

>> VÆLG * FRA data.minister;

Konklusion:

Vi har gjort alle de nødvendige eksempler på INSERT IGNORE på duplikerede værdier via MySQL Workbench og MySQL kommandolinjeklientshell.

Kamp om Wesnoth 1.13.6 Udvikling frigivet
Kamp om Wesnoth 1.13.6 udgivet i sidste måned, er den sjette udviklingsudgivelse i 1.13.x-serien, og den leverer en række forbedringer, især til bruge...
Sådan installeres League Of Legends på Ubuntu 14.04
Hvis du er fan af League of Legends, er dette en mulighed for dig at prøvekøre League of Legends. Bemærk, at LOL understøttes på PlayOnLinux, hvis du ...
Installer det nyeste OpenRA-strategispil på Ubuntu Linux
OpenRA er en Libre / Free Real Time Strategy-spilmotor, der genskaber de tidlige Westwood-spil som det klassiske Command & Conquer: Red Alert. Distrib...