Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como evitar a inserção de registros duplicados no MySQL


Às vezes, você pode precisar impedir a inserção duplicada ao adicionar linhas à tabela MySQL. Você pode fazer isso facilmente usando a instrução INSERT IGNORE. Neste artigo, veremos como evitar a inserção de registros duplicados no MySQL.



Como evitar a inserção de registros duplicados no MySQL


Aqui estão as etapas para evitar a inserção de registros duplicados no MySQL. Há duas partes para manter em mente. Primeiro, você precisa criar um índice de coluna UNIQUE para sua tabela. Em seguida, você precisa inserir dados usando INSERT IGNORE para evitar registros duplicados.

Digamos que você tenha a seguinte tabela vendas(id, order_date, amount)
mysql> create table sales(
          id int, 
          order_date date, 
          amount int
          );



1. Criar índice exclusivo


Adicionamos um índice UNIQUE para id coluna usando a instrução ALTER TABLE.

Aqui está a sintaxe para criar o índice UNIQUE no MySQL.
alter table table_name ADD UNIQUE INDEX(
        column_name1, 
        column_name2,
        ...
        column_nameN
        );

Aqui está a consulta SQL para adicionar o índice UNIQUE ao id coluna em vendas tabela.
mysql> alter table sales ADD UNIQUE INDEX(id);



2. Insira dados usando INSERT IGNORE


Em seguida, vamos inserir dados usando INSERT IGNORE.

Antes de prosseguirmos, vamos ver o que é INSERT IGNORE no MySQL e como funciona o INSERT IGNORE.



O que é INSERIR IGNORAR?


INSERT IGNORE é um comando que força o MySQL a ignorar erros quando você insere dados em uma tabela MySQL.



Como funciona INSERT IGNORE?


No nosso caso, já criamos um índice UNIQUE para id coluna. Se usarmos a instrução INSERT para adicionar dados com linhas duplicadas, o MySQL lançará um erro e interromperá a execução da consulta após a primeira linha duplicada.

Em vez disso, quando usamos INSERT IGNORE, o MySQL descartará silenciosamente a inserção da linha duplicada sem gerar um erro e continuará a execução da consulta.

Portanto, se um registro não contiver dados duplicados, o MySQL o inserirá normalmente. Se for um registro duplicado, o MySQL simplesmente o ignorará.

Aqui está a consulta SQL para inserir dados sem duplicatas em vendas tabela.
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 |
+------+------------+--------+

Como você pode ver, o MySQL evita inserir linhas duplicadas, sem gerar nenhum erro.

Precisa de uma ferramenta de relatório para MySQL? O Ubiq facilita a visualização de dados em minutos e o monitoramento em painéis em tempo real. Experimente hoje!