MySQL Invoegen Negeer dubbele sleutel

Mysql Insert Ignore Duplicate Key



Er zijn vaak tegenstrijdige gegevens in tabellen of uitkomstsets. Het is ook tijdrovend om te corrigeren en vaak moeten herhaalde records worden vermeden. Het is noodzakelijk om dubbele records te identificeren en ze uit beide tabellen te verwijderen. In deze sectie wordt uitgelegd hoe u kunt voorkomen dat dubbele gegevens in een tabel verschijnen en hoe u huidige dubbele records kunt verwijderen. In deze handleiding leert u hoe u de INSERT IGNORE-component gebruikt om de fout te voorkomen.

Syntaxis:

Hier is de syntaxis voor de INSERT IGNORE-query.







>>INSERT IGNORE INTO table_name(col1, col2, col3)WAARDEN(value_list),(value_list),(value_list);

INSERT IGNORE via Workbench:

Open uw MySQL Workbench 8.0 vanaf uw systeem en verbind deze met de database-instantie.





In het commandogebied moet u een tabel Medewerker maken met vier kolommen waarvan er één als UNIEK moet worden opgegeven. Probeer de onderstaande query in het zoekgebied van de navigator om deze tabel te maken. Selecteer de hele query en klik op het flash-teken om deze uit te voeren.





>>MAAK TABEL Medewerker(ID int PRIMAIRE SLEUTEL NIET NULL, Naam varchar(vijftig)NIET NULL, Leeftijd Varchar(vijftig), Salaris varchar(vijftig), UNIEK(ID kaart));

Na het aanmaken kunt u de tafelmedewerker in de lijst vinden onder de optie Tabellen onder de databasegegevens.



In de rasterweergave kunt u de records invoeren zonder een query te typen. Open dus de rasterweergave van de tabelmedewerker en voeg er enkele records aan toe, zoals hieronder wordt weergegeven. We hebben alle unieke records ingevoerd zonder enige duplicaten. Druk op de knop 'Toepassen' om de wijzigingen toe te passen.

Er wordt een nieuw venster geopend met de relevante vragen met betrekking tot de records die we hierboven hebben ingevoerd. Dit scherm kan een Review-scherm worden genoemd. Als u iets wilt wijzigen, kunt u dat hier doen. Klik anders op de knop Toepassen om de query's uit te voeren.

Zoals u kunt zien, is de query met succes uitgevoerd en zijn de records opgeslagen in de database en de tabel Werknemer. Het zou een fout hebben gegenereerd als we een dubbele waarde in de kolom-ID hadden toegevoegd. Tik op de knop Voltooien.

Dit ging allemaal over de rasterweergave. Nu gaan we records invoegen via het querygebied. Ondertussen hebben we deze keer dubbele records ingevoegd om de uitvoer te controleren. We hebben dus de onderstaande INSERT-query geprobeerd, waar we twee zoeklijsten hebben. Beide zoeklijsten hebben dezelfde waarde bij de kolom ‘ID’. Selecteer de query en druk op het flash-teken om de query uit te voeren.

De query werkt niet correct en er wordt een fout gegenereerd vanwege de dubbele waarden in de opdracht INSERT zoals weergegeven in de afbeelding.

Probeer nu dezelfde bovenstaande query met de INSERT IGNORE-component en voer deze uit zoals gepresenteerd.

U kunt zien dat het geen fout genereert in het uitvoergebied, maar het geeft een waarschuwing dat het commando dubbele waarden bevat.

Vernieuw de rasterweergave van de tabel Werknemer. De INSERT IGNORE-query heeft de helft gewerkt. Het heeft de eerste zoeklijst in de tabel ingevoegd, maar de tweede zoeklijst is genegeerd vanwege de herhaalde waarde 13.

INSERT IGNORE via Command-Line Shell:

Laten we, om dit concept te begrijpen, de MySQL-opdrachtregelclientshell in uw systeem openen. Typ desgevraagd uw MySQL-wachtwoord om eraan te werken.

Nu is het tijd om een ​​tabel te maken. Probeer de onderstaande opdracht om dit te doen. We hebben een tabel gemaakt met de naam 'minister', terwijl een van de kolommen een UNIEKE beperking heeft. Het is duidelijk dat de kolom-ID alleen de unieke waarden accepteert en niet de dubbele waarden.

>>MAAK TABEL data.minister(Mid INT PRIMAIRE SLEUTEL UNIEK NIET NULL, Naam VARCHAR(Vier vijf), Stad VARCHAR(Vier vijf));

De query werkt naar behoren en de tabel is gemaakt. Om de INSERT IGNORE-clausule te begrijpen, moet u eerst de werking van het eenvoudige INSERT-commando zien. Als u de opdracht INSERT gebruikt om verschillende informatiegegevens in een tabel in te voegen, schort MySQL de transactie op en wordt een uitzondering gegenereerd als er tijdens de verwerking een fout optreedt. Als gevolg hiervan zijn er geen rijen aan de tabel toegevoegd. Laten we het eerste record in de tabel minister invoegen met behulp van de hieronder weergegeven query. De query zal met succes werken omdat de tabel momenteel leeg is en er geen record is om mee te werken.

Omdat de kolom-ID UNIEK is, zal het een fout genereren wanneer we de onderstaande instructie op de opdrachtregelshell proberen. Dit komt omdat we de waarde 11 in de vorige query hebben toegevoegd en vanwege de UNIQUE-sleutel kunnen we de herhaalde waarde niet opnieuw toevoegen.

Daarom kunnen we bij het controleren van de tabel zien dat aan de tabel slechts 1 record is toegevoegd door de eerste INSERT-query.

>>KIES*VAN data.minister;

Omgekeerd, als u de INSERT IGNORE-component gebruikt, worden de onjuiste gegevensrijen die de fout veroorzaken over het hoofd gezien en worden alleen de juiste ingevoerd. In de onderstaande opdracht hebben we de opdracht INSERT IGNORE gebruikt om te voorkomen dat herhaalde waarden aan de tabel worden toegevoegd en de fout over het hoofd wordt gezien. Zoals u kunt zien, heeft de eerste zoeklijst een dubbele waarde 11, hetzelfde als in de vorige zoekopdracht. Hoewel de tweede lijst met waarden uniek is, wordt er 1 record weergegeven in de tabel, de tweede lijst met waarden. MySQL geeft ook aan dat er slechts 1 record is ingevoegd en dat er 1 waarschuwing in het bericht wordt gegenereerd. Je mag er dan vanuit gaan dat als we de INSERT IGNORE-clausule gebruiken, MySQL een waarschuwing geeft.

Zoals u kunt zien aan de hand van de onderstaande uitvoer, hebben we slechts twee records in deze tabel: de eerste lijst met waarden in de bovenstaande query, die over het hoofd wordt gezien.

>>KIES*VAN data.minister;

Conclusie:

We hebben alle noodzakelijke voorbeelden van INSERT IGNORE op dubbele waarden gedaan via MySQL Workbench en MySQL-opdrachtregelclientshell.