Actualizado el domingo, 17 marzo, 2024

La instrucción INSERT es una de las instrucciones más fundamentales y útiles en MySQL y en cualquier otra base de datos.

Nos permite insertar los registros en una tabla existente haciendo referencia al nombre de la tabla y proporcionando el diseño de las columnas de la tabla. A continuación, proporcionamos los valores que deseamos insertar en la tabla.

Sin embargo, cuando se trata de la instrucción INSERT, debemos asegurarnos de que cada fila especificada no contenga un error. De lo contrario, se producirá un error en toda la cláusula. Esto puede ser increíblemente ineficiente cuando se trata de varios registros de inserción.

Es bueno tener una reserva que permita a MySQL insertar selectivamente las filas que contienen valores válidos e ignorar las que no se ajustan a los requisitos. Aquí es donde entra en juego la cláusula INSERT IGNORE.

En este tutorial, aprenderemos cómo usar la cláusula INSERT IGNORE para permitir que MySQL ignore cualquier fila que contenga datos no válidos en lugar de terminar todo el bloque de inserción.

Sintaxis:

A continuación se muestra la sintaxis básica de la instrucción

INSERT IGNORE INTO table(column_list)
VALUES(value_list),
      (value_list),

 
La cláusula INSERT IGNORE es específica de la base de datos MySQL y no es compatible con otros sistemas de bases de datos, ya que no forma parte del estándar SQL.

Sin embargo, otros motores de base de datos proporcionan una implementación similar mediante cláusulas como INSERT ON DUPLICATE KEY UPDATE, INSERT INTO ON CONFLICT DO NOTHING (PostgreSQL) y más.

Cláusula INSERT IGNORE de MySQL

Exploremos un ejemplo que demuestra cómo usar la cláusula INSERT IGNORE en MySQL.

Considere la tabla de ejemplo que crea una tabla básica que contiene la información del producto:

CREATE TABLE products (
product_id INT PRIMARY KEY AUTO_INCREMENT,
product_name VARCHAR(255),
category VARCHAR(255),
price DECIMAL(10, 2),
quantity INT,
expiration_date DATE,
barcode BIGINT
);

 
Una vez que creamos la tabla, intentemos insertar las filas en la tabla con algunas filas que contienen un error.

INSERT INTO products (product_name, category, price, quantity, expiration_date, barcode)
VALUES
    ('Chef Hat 25cm', 'bakery', 24.67, 57, '2023-09-09', 2854509564204),
    ('Quail Eggs - Canned', 'pantry', 17.99, 67, '2023-09-29', 1708039594250),
    (,'bakery', 92.53, 10, '2023-09-22', 8704051853058);

 
Es posible que observe que la última fila contiene un error. Esto es deliberado para demostrar lo que sucede cuando intentamos insertar los datos como se proporciona en el ejemplo anterior.

Una vez que ejecutamos la consulta anterior, debería devolver el mensaje de error de la siguiente manera:

SQL Error [1064] [42000]: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ','bakery', 92.53, 10, '2023-09-22', 8704051853058)' at line 5

 
Como resultado, MySQL terminará todas las instrucciones INSERT aunque las dos primeras filas sean válidas. Para superar esto, podemos usar la cláusula INSERT IGNORE de la siguiente manera:INSERT IGNORE INTO productos (product_name, categoría, precio, cantidad, expiration_date, código de barras

INSERT IGNORE INTO products (product_name, category, price, quantity, expiration_date, barcode)
VALUES
    ('Chef Hat 25cm', 'bakery', 24.67, 57, '2023-09-09', 2854509564204),
    ('Quail Eggs - Canned', 'pantry', 17.99, 67, '2023-09-29', 1708039594250),
    (,'bakery', 92.53, 10, '2023-09-22', 8704051853058);

 
MySQL insertará los registros válidos e ignorará los no válidos.

Conclusión

En este tutorial, aprendimos cómo usar la cláusula INSERT IGNORE en MySQL para omitir cualquier fila que contenga un error durante una instrucción INSERT mientras se aplican las válidas.