INSERT IF NOT EXISTS en MySQL

Preet Sanghavi 28 marzo 2022
INSERT IF NOT EXISTS en MySQL

En este tutorial, nuestro objetivo es comprender cómo usar la cláusula INSERT IF NOT EXISTS en una tabla en la base de datos MySQL.

A menudo insertamos ciertos valores en una columna particular de una tabla sin verificar su existencia en la tabla. Sin embargo, a veces, es necesario evitar valores duplicados al insertarlos en una tabla en particular.

Considere el ejemplo de un concesionario de automóviles. Al insertar datos en la tabla de automóviles, no queremos que la identificación del automóvil de un tipo particular de automóvil se inserte dos veces en nuestra tabla.

MySQL nos proporciona la cláusula IINSERT IF NOT EXISTS que nos ayuda a realizar esta operación de manera eficiente. La sintaxis básica para INSERT IF NOT EXISTS es la siguiente.

INSERT INTO name_of_the_table (column_name)
SELECT * FROM (SELECT value_name) AS val
WHERE NOT EXISTS (<conditonal expression>);

En el name_of_the_table insertamos el value_name en el column_name si se cumple la conditonal expression.

Pero antes de comenzar, creemos un conjunto de datos ficticio.

-- create the table student_details
CREATE TABLE student_details(
  stu_id int,
  stu_firstName varchar(255) DEFAULT NULL,
  stu_lastName varchar(255) DEFAULT NULL,
  primary key(stu_id)
);
-- insert rows to the table student_details
INSERT INTO student_details(stu_id,stu_firstName,stu_lastName) 
 VALUES(1,"Preet","Sanghavi"),
 (2,"Rich","John"),
 (3,"Veron","Brow"),
 (4,"Geo","Jos"),
 (5,"Hash","Shah"),
 (6,"Sachin","Parker"),
 (7,"David","Miller");

INSERT IF NOT EXISTS en MySQL

Entendamos cómo usar INSERT IF NOT EXISTS en MySQL insertando un nuevo estudiante llamado Preet con el stu_id como 8.

Sin embargo, solo insertaremos este valor si los nombres de los estudiantes existentes en la tabla no coinciden con Preet. Podemos hacer esta operación usando la siguiente consulta.

INSERT INTO student_details(stu_id,stu_firstName, stu_lastName)
SELECT * FROM (SELECT 8 as stu_id, 'Preet' AS customer_name, 'Shah' AS stu_lastName) AS new_value
WHERE NOT EXISTS (
    SELECT stu_firstName FROM student_details WHERE stu_firstName = 'Preet'
) LIMIT 1;

Ahora, verifique la tabla student_details con la siguiente consulta.

SELECT * from student_information;

La consulta antes mencionada nos dará el siguiente resultado.

stu_id	stu_firstName	stu_lastName
1	      Preet	        Sanghavi
2	      Rich	        John
3	      Veron	        Brow
4	      Geo	        Jos
5	      Hash	        Shah
6	      Sachin	    Parker
7	      David	        Miller

Como podemos ver, no se han agregado nuevos valores a la tabla porque el primer nombre Preet ya existe en la tabla student_details.

Intentemos agregar otro estudiante con stu_id como 9 y stu_firstName como Dhruv y stu_lastName como Shah. Podemos realizar esta operación usando la siguiente consulta.

INSERT INTO student_details(stu_id,stu_firstName, stu_lastName)
SELECT * FROM (SELECT 9 as stu_id, 'Dhruv' AS customer_name, 'Shah' AS stu_lastName) AS new_value
WHERE NOT EXISTS (
 SELECT stu_firstName FROM student_details WHERE stu_firstName = 'Dhruv'
) LIMIT 1;

Como se ve en la consulta anterior, agregamos al estudiante con stu_firstName como Dhruv si aún no existe en la tabla.

El resultado de la consulta antes mencionada es el siguiente.

stu_id	stu_firstName	stu_lastName
1		Preet			Sanghavi
2		Rich			John
3		Veron			Brow
4		Preet			Jos
5		Hash			Shah
6		Sachin			Parker
7		David			Miller
9		Dhruv			Shah

Se ha creado una nueva entrada, Dhruv Shah con stu_id como 9, porque no hay duplicados en el primer nombre.

Por lo tanto, con la ayuda de la sentencia INSERT IF NOT EXISTS, podemos introducir eficazmente detalles en una tabla dado que el valor a insertar cumple la condición requerida en la cláusula NOT EXISTS de MySQL.

Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub

Artículo relacionado - MySQL Query