sql >> Databáze >  >> RDS >> Mysql

Jak se vyhnout vkládání duplicitních záznamů do MySQL

Někdy může být nutné zabránit duplicitnímu vkládání při přidávání řádků do tabulky MySQL. Můžete to snadno provést pomocí příkazu INSERT IGNORE. V tomto článku se podíváme na to, jak se vyhnout vkládání duplicitních záznamů do MySQL.


Jak se vyhnout vkládání duplicitních záznamů do MySQL

Zde jsou kroky, jak se vyhnout vkládání duplicitních záznamů do MySQL. Je třeba mít na paměti dvě části. Nejprve musíte vytvořit UNIKÁTNÍ index sloupců pro vaši tabulku. Dále musíte vložit data pomocí INSERT IGNORE, abyste se vyhnuli duplicitním záznamům.

Řekněme, že máte následující tabulku prodej(id, datum_objednávky, částka)

mysql> create table sales(
          id int, 
          order_date date, 
          amount int
          );


1. Vytvořit jedinečný index

Přidáme UNIKÁTNÍ index pro id pomocí příkazu ALTER TABLE.

Zde je syntaxe pro vytvoření UNIQUE indexu v MySQL.

alter table table_name ADD UNIQUE INDEX(
        column_name1, 
        column_name2,
        ...
        column_nameN
        );

Zde je dotaz SQL pro přidání UNIQUE indexu do id ve sloupci prodeje tabulka.

mysql> alter table sales ADD UNIQUE INDEX(id);


2. Vložte data pomocí INSERT IGNORE

Dále vložíme data pomocí INSERT IGNORE.

Než budeme pokračovat, podívejme se, co je INSERT IGNORE v MySQL a jak funguje INSERT IGNORE.


Co je INSERT IGNORE?

INSERT IGNORE je příkaz, který nutí MySQL ignorovat chyby při vkládání dat do tabulky MySQL.


Jak INSERT IGNORE funguje?

V našem případě jsme již vytvořili UNIKÁTNÍ index pro id sloupec. Pokud použijeme příkaz INSERT k přidání dat s duplicitními řádky, MySQL vyvolá chybu a zastaví provádění dotazu po prvním duplicitním řádku.

Místo toho, když použijeme INSERT IGNORE, MySQL tiše zahodí vložení duplicitního řádku bez generování chyby a bude pokračovat v provádění dotazu.

Pokud tedy záznam neobsahuje duplicitní data, MySQL je vloží jako obvykle. Pokud se jedná o duplicitní záznam, pak ho MySQL jednoduše ignoruje.

Zde je SQL dotaz pro vložení dat bez duplicit do prodeje tabulka.

mysql> mysql> insert ignore into sales(id,order_date,amount)
     values(1, '2021-01-01', 250),
     (1, '2021-01-01', 250),
     (2, '2021-01-02', 200),
     (3, '2021-01-03', 150),
     (2, '2021-01-02', 200);
Query OK, 3 rows affected (0.10 sec)
Records: 5  Duplicates: 2  Warnings: 0

mysql> select * from sales;
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    1 | 2021-01-01 |    250 |
|    2 | 2021-01-02 |    200 |
|    3 | 2021-01-03 |    150 |
+------+------------+--------+

Jak můžete vidět, MySQL se vyhýbá vkládání duplicitních řádků, aniž by generovalo jakoukoli chybu.

Potřebujete nástroj pro vytváření sestav pro MySQL? Ubiq usnadňuje vizualizaci dat během několika minut a sledování na řídicích panelech v reálném čase. Vyzkoušejte to ještě dnes!

  1. Provozování clusteru MariaDB Galera bez nástrojů pro orchestraci kontejnerů:Část první

  2. zobrazit vlastní text SQL z výsledku sloupce tabulky

  3. Korupce MS Access Část 1:Běžné příčiny

  4. Formát měsíce v římských číslicích v PostgreSQL