Vložit MySQL Ignorovat duplicitní klíč

Mysql Insert Ignore Duplicate Key



V tabulkách nebo sadách výsledků jsou často konfliktní data. Oprava je také časově náročná a často je třeba se vyhnout opakovaným záznamům. Je nutné identifikovat duplicitní záznamy a odstranit je z kterékoli tabulky. Tato část se bude zabývat tím, jak zabránit zobrazení duplicitních dat v tabulce a jak odstranit aktuální duplicitní záznamy. V této příručce se naučíte používat klauzuli INSERT IGNORE, abyste se vyhnuli chybě.

Syntax:

Zde je syntaxe dotazu INSERT IGNORE.







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

VLOŽTE IGNOROVAT přes Workbench:

Otevřete MySQL Workbench 8.0 ze svého systému a připojte jej k instanci databáze.





V příkazové oblasti musíte vytvořit tabulku Zaměstnanec se čtyřmi sloupci, kde jeden z nich musí být uveden jako JEDINEČNÝ. Tuto tabulku vytvořte pomocí níže uvedeného dotazu v oblasti dotazů navigátoru. Vyberte celý dotaz a spusťte jej kliknutím na znaménko blesku.





>>VYTVOŘIT TABULKU Zaměstnanec(ID int PRIMARY KEY NOT NULL, Name varchar(padesátka)NOT NULL, Age Varchar(padesátka), Plat varchar(padesátka), JEDINEČNÉ(ID));

Po vytvoření najdete zaměstnance tabulky v seznamu pod možností Tabulky pod údaji databáze.



V zobrazení mřížky můžete zadávat záznamy bez zadávání jakéhokoli dotazu. Otevřete tedy zobrazení mřížky zaměstnance tabulky a přidejte do něj některé záznamy, jak je uvedeno níže. Zadali jsme všechny jedinečné záznamy bez duplikátů. Změny použijete kliknutím na tlačítko „Použít“.

Otevře se nové okno s příslušnými dotazy souvisejícími se záznamy, které jsme zadali výše. Tuto obrazovku lze nazvat obrazovkou Kontrola. Pokud chcete něco změnit, můžete to udělat zde. V opačném případě spusťte dotazy stisknutím tlačítka Použít.

Jak vidíte, dotaz byl úspěšně proveden a záznamy jsou uloženy do databáze a její tabulky Zaměstnanec. Pokud bychom do ID sloupce přidali jakoukoli duplicitní hodnotu, vygenerovalo by to chybu. Klepněte na tlačítko Dokončit.

Všechno to bylo o zobrazení mřížky. Nyní budeme vkládat záznamy přes oblast dotazu. Mezitím jsme tentokrát vkládali duplicitní záznamy, abychom zkontrolovali výstup. Vyzkoušeli jsme tedy níže uvedený dotaz INSERT, kde máme dva seznamy hodnot. Oba seznamy hodnot mají ve sloupci „ID“ stejnou hodnotu. Vyberte dotaz a spusťte dotaz spuštěním znaku flash.

Dotaz nebude fungovat správně a bude generovat chybu kvůli duplicitním hodnotám v příkazu INSERT, jak jsou zobrazeny na obrázku.

Nyní zkuste stejný výše uvedený dotaz s klauzulí INSERT IGNORE a spusťte jej, jak je uvedeno.

Můžete vidět, že nevytváří chybu ve výstupní oblasti, ale dává varování, že příkaz obsahuje duplicitní hodnoty.

Obnovte zobrazení mřížky tabulky Zaměstnanec. Dotaz INSERT IGNORE fungoval napůl. Vložil první seznam hodnot do tabulky, ale druhý seznam hodnot byl ignorován kvůli opakované hodnotě 13.

VLOŽTE IGNOROVAT pomocí prostředí příkazového řádku:

Abychom tomuto konceptu porozuměli, otevřeme ve vašem systému klientský shell příkazového řádku MySQL. Po vyzvání zadejte heslo k MySQL a začněte na něm pracovat.

Nyní je čas vytvořit tabulku. Zkuste to provést pomocí níže uvedeného příkazu. Vytvořili jsme tabulku s názvem „ministr“, zatímco jeden z jejích sloupců má JEDINEČNÉ omezení. Je jasné, že ID sloupce bude přijímat pouze jedinečné hodnoty, nikoli duplicitní hodnoty.

>>VYTVOŘIT TABULKU data.minister(Mid INT PRIMARY KEY UNIQUE NOT NULL, Name VARCHAR(Čtyři pět), Město VARCHAR(Čtyři pět));

Dotaz funguje správně a tabulka byla vytvořena. Abyste porozuměli klauzuli INSERT IGNORE, musíte se nejprve podívat, jak funguje jednoduchý příkaz INSERT. Pokud používáte příkaz INSERT k vložení několika informačních dat do tabulky, MySQL transakci pozastaví a vygeneruje výjimku, pokud během zpracování dojde k chybě. V důsledku toho do tabulky nejsou přidány žádné řádky. Vložme první záznam do ministra tabulky pomocí níže uvedeného dotazu. Dotaz bude úspěšně fungovat, protože tabulka je v současné době prázdná a neexistuje žádný záznam, který by bylo možné porovnat.

Jelikož ID sloupce je JEDINEČNÉ, při pokusu o níže uvedenou instrukci na shellu příkazového řádku vygeneruje chybu. Důvodem je, že jsme v předchozím dotazu přidali hodnotu 11 a díky klíči UNIQUE nám to neumožňuje znovu přidat opakovanou hodnotu.

Při kontrole tabulky tedy vidíme, že tabulka má pouze 1 záznam přidaný prvním dotazem INSERT.

>>VYBRAT*OD data.minister;

Naopak, pokud používáte klauzuli INSERT IGNORE, nesprávné datové řádky, které spouští chybu, budou přehlédnuty a budou zadávány pouze ty přesné. V níže uvedeném příkazu jsme použili příkaz INSERT IGNORE, abychom se vyhnuli přidávání opakovaných hodnot do tabulky a přehlédli chybu. Jak vidíte, první seznam hodnot má duplicitní hodnotu 11 stejnou jako v předchozím dotazu. Druhý seznam hodnot je jedinečný, ale zobrazí 1 záznam vložený do tabulky, což je druhý seznam hodnot. MySQL také naznačuje, že byl vložen pouze 1 záznam a ve zprávě je vygenerováno 1 varování. Potom můžete předpokládat, že pokud používáme klauzuli INSERT IGNORE, MySQL poskytuje varování.

Jak vidíte z níže uvedeného výstupu, v této tabulce máme pouze dva záznamy - první seznam hodnot poskytnutých ve výše uvedeném dotazu, který je přehlížen.

>>VYBRAT*OD data.minister;

Závěr:

Udělali jsme všechny potřebné příklady INSERT IGNORE na duplicitních hodnotách přes MySQL Workbench a klientský shell příkazového řádku MySQL.