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.