MySQL MariaDB

MySQL Vložit Ignorovat duplicitní klíč

MySQL Vložit Ignorovat duplicitní klíč
V tabulkách nebo sadách výsledků jsou často konfliktní data. Oprava je také časově náročná a je třeba se vyhnout opakovaným záznamům. Identifikace duplicitních záznamů a jejich odstranění z obou tabulek je nutné. Tato část se bude zabývat tím, jak zabránit tomu, aby se v tabulce objevily duplicitní údaje, a jak eliminovat aktuální duplicitní záznamy. V této příručce se naučíte, jak používat klauzuli INSERT IGNORE, abyste se vyhnuli chybě.

Syntax:

Zde je syntaxe dotazu INSERT IGNORE.

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

INSERT IGNORE via Workbench:

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

V oblasti příkazů musíte vytvořit tabulku „Zaměstnanec“ se čtyřmi sloupci, kde jeden z nich musí být uveden jako „JEDINEČNÝ“. Chcete-li vytvořit tuto tabulku, zkuste níže uvedený dotaz v oblasti dotazů navigátoru. Vyberte celý dotaz a kliknutím na znak blesku jej spusťte.

>> CREATE TABLE Employee (ID int PRIMARY KEY NOT NULL, Name varchar (50) NOT NULL, Age Varchar (50), Plat varchar (50), UNIQUE (ID));

Po vytvoření najdete tabulku „zaměstnanec“ v seznamu pod možností „Tabulky“ pod databází „data“.

V zobrazení mřížky můžete zadávat záznamy bez zadání jakéhokoli dotazu. Otevřete tedy mřížkový pohled na tabulku „zaměstnanec“ a přidejte do ní několik záznamů, jak je znázorněno níže. Všechny jedinečné záznamy jsme zadali bez duplikátů. Změny provedete stisknutím tlačítka „Použít“.

Otevře se nové okno s příslušnými dotazy týkajícími se záznamů, 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 klepnutím na tlačítko 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 sloupce „ID“ přidali duplicitní hodnotu, došlo by k chybě. Klepněte na tlačítko „Dokončit“.

Všechno to bylo o mřížkovém pohledu. Nyní budeme vkládat záznamy prostřednictvím oblasti dotazu. Mezitím tentokrát vkládáme duplicitní záznamy, abychom zkontrolovali výstup. Takže jsme vyzkoušeli níže uvedený dotaz „VLOŽIT“, kde máme dva seznamy hodnot. Oba seznamy hodnot mají ve sloupci „ID“ stejnou hodnotu. Vyberte dotaz a stisknutím blesku proveďte dotaz.

Dotaz nebude fungovat správně a vygeneruje chybu kvůli duplikovaným hodnotám v příkazu INSERT zobrazeným na obrázku.

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

Vidíte, že ve výstupní oblasti negeneruje chybu, ale dává varování, že příkaz obsahuje duplicitní hodnoty.

Obnovit mřížkové zobrazení 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“.

INSERT IGNORE via Command-Line Shell:

Abychom pochopili tento koncept, otevřete ve vašem systému klientské prostředí příkazového řádku MySQL. Na požádání zadejte své heslo MySQL a začněte na něm pracovat.

Nyní je čas vytvořit tabulku. Vyzkoušejte následující příkaz. Vytvořili jsme tabulku s názvem „ministr“, zatímco jeden z jejích sloupců má JEDINEČNÉ omezení. Je jasné, že sloupec „ID“ bude akceptovat pouze jedinečné hodnoty, nikoli duplicitní hodnoty.

>> CREATE TABLE data.ministr (Mid INT PRIMARY KEY UNIQUE NOT NULL, jméno VARCHAR (45), město VARCHAR (45));

Dotaz funguje odpovídajícím způsobem a tabulka byla vytvořena. Abyste pochopili klauzuli INSERT IGNORE, musíte nejprve vidět fungování jednoduchého příkazu INSERT. Pokud používáte příkaz INSERT k vložení několika informačních dat do tabulky, MySQL pozastaví transakci 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 tabulky „ministr“ 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, se kterým by se mohla vyrovnat.

Protože sloupec „ID“ je JEDINEČNÝ, při pokusu o následující instrukci na shellu příkazového řádku vygeneruje chybu. Je to proto, že jsme v předchozím dotazu přidali hodnotu „11“ a kvůli UNIQUE klíči 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.

>> SELECT * FROM data.ministr;

Naopak, pokud používáte klauzuli INSERT IGNORE, nesprávné datové řádky, které způsobí chybu, budou přehlédnuty a zadají se pouze ty přesné. V níže uvedeném příkazu používáme příkaz INSERT IGNORE, abychom zabránili přidá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. Zatímco druhý seznam hodnot je jedinečný, zobrazí 1 záznam vložený do tabulky, což je druhý seznam hodnot. MySQL také označuje, že byl vložen pouze 1 záznam a ve zprávě je vygenerováno 1 varování. Pak můžete předpokládat, že pokud používáme klauzuli INSERT IGNORE, MySQL poskytuje varování.

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

>> SELECT * FROM data.ministr;

Závěr:

Udělali jsme všechny nezbytné příklady INSERT IGNORE na duplicitních hodnotách prostřednictvím MySQL Workbench a prostředí klienta příkazového řádku MySQL.

Jak používat Xdotool ke stimulaci kliknutí myší a klávesových zkratek v systému Linux
Xdotool je bezplatný a otevřený nástroj příkazového řádku pro simulaci kliknutí myší a stisknutí kláves. Tento článek se bude věnovat krátkému průvodc...
Top 5 ergonomických produktů pro počítačové myši pro Linux
Způsobuje dlouhodobé používání počítače bolest zápěstí nebo prstů? Trpíte ztuhlými klouby a neustále si musíte třást ruce? Cítíte pálivou bolest pokaž...
Jak změnit nastavení myši a touchpadu pomocí Xinput v Linuxu
Většina linuxových distribucí je ve výchozím nastavení dodávána s knihovnou „libinput“ pro zpracování vstupních událostí v systému. Může zpracovávat v...