sql >> Base de Datos >  >> RDS >> Mysql

Cómo evitar la inserción de registros duplicados en MySQL

A veces, es posible que deba evitar la inserción duplicada al agregar filas a la tabla MySQL. Puede hacer esto fácilmente usando la instrucción INSERT IGNORE. En este artículo, veremos cómo evitar insertar registros duplicados en MySQL.


Cómo evitar la inserción de registros duplicados en MySQL

Estos son los pasos para evitar insertar registros duplicados en MySQL. Hay dos partes a tener en cuenta. Primero, debe crear un índice de columna ÚNICO para su tabla. A continuación, debe insertar datos utilizando INSERT IGNORE para evitar registros duplicados.

Digamos que tiene la siguiente tabla ventas (id, order_date, cantidad)

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


1. Crear índice único

Agregamos un índice ÚNICO para id columna usando la sentencia ALTER TABLE.

Esta es la sintaxis para crear un índice ÚNICO en MySQL.

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

Aquí está la consulta SQL para agregar un índice ÚNICO a id columna en ventas mesa.

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


2. Insertar datos usando INSERT IGNORE

A continuación, insertaremos datos usando INSERT IGNORE.

Antes de continuar, veamos qué es INSERT IGNORE en MySQL y cómo funciona INSERT IGNORE.


¿Qué es INSERTAR IGNORAR?

INSERT IGNORE es un comando que obliga a MySQL a ignorar los errores cuando inserta datos en una tabla de MySQL.


¿Cómo funciona INSERTAR IGNORAR?

En nuestro caso, ya hemos creado un índice ÚNICO para id columna. Si usamos la declaración INSERT para agregar datos con filas duplicadas, MySQL generará un error y detendrá la ejecución de la consulta después de la primera fila duplicada.

En cambio, cuando usamos INSERT IGNORE, MySQL descartará silenciosamente la inserción de una fila duplicada sin generar un error y continuará con la ejecución de la consulta.

Entonces, si un registro no contiene datos duplicados, MySQL lo insertará como de costumbre. Si es un registro duplicado, MySQL simplemente lo ignorará.

Aquí está la consulta SQL para insertar datos sin duplicados en ventas mesa.

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 puede ver, MySQL evita insertar filas duplicadas, sin generar ningún error.

¿Necesita una herramienta de informes para MySQL? Ubiq facilita la visualización de datos en minutos y la supervisión en paneles en tiempo real. ¡Pruébalo hoy!