Actualice el registro si existe; de lo contrario, insértelo en la tabla MySQL

Shraddha Paghdar 20 junio 2023
Actualice el registro si existe; de lo contrario, insértelo en la tabla MySQL

Los administradores de bases de datos pueden necesitar ocasionalmente agregar un registro a la tabla MySQL o actualizar uno si está presente regularmente. MySQL enviará una alerta si un usuario intenta insertar un registro que ya existe o tiene un valor de CLAVE PRINCIPAL duplicado.

Este artículo describe los métodos que se pueden utilizar para corregir este error y obtener un mejor resultado.

Actualice el registro si existe; de lo contrario, insértelo en la tabla MySQL

Cuando se requiere insertar filas después de determinar si son, de hecho, nuevas o ya existen, MySQL ofrece varias declaraciones útiles.

Use REEMPLAZAR EN para actualizar el registro si existe; de lo contrario, insértelo en la tabla MySQL

Un enfoque es usar la instrucción REEMPLAZAR si realmente desea reemplazar filas cuando los comandos INSERTAR fallan debido a valores duplicados ÚNICOS o CLAVE PRIMARIA como se describió anteriormente.

Hay dos posibles consecuencias para cada comando emitido cuando se usa una declaración REPLACE INTO:

  1. Se ejecuta una instrucción INSERT típica porque no se pudo descubrir ninguna fila de datos con los valores deseados.
  2. Cuando se descubre una fila de datos coincidentes, la fila existente se borra utilizando la declaración habitual DELETE y luego se lleva a cabo la INSERCIÓN estándar.

Por ejemplo, supongamos que tenemos una tabla de empleados con columnas para id, departamento, nombre_del_empleado y año_de_unión. Hemos tomado la decisión de cambiar nuestro departamento y joining_year de id = 101 registro de vuelta al registro original de Operaciones.

-- Before update
SELECT * from employees where id = 101;
REPLACE INTO employees
    (id, department, employee_name, joining_year)
VALUES
    (101, 'Operations', 'John Doe', 2013);
-- After update
SELECT * from employees where id = 101;

Ejecute la línea de código anterior en cualquier navegador compatible con MySQL. Mostrará el siguiente resultado:

Producción :

-- Before update
+----+------------+---------------+----------------+
| id | department | employee_name | year_published |
+----+------------+---------------+----------------+
|101 | Technology | John Doe      |       2017     |
+----+------------+---------------+----------------+

Query OK, 2 rows affected (0.01 sec)

-- After update
+----+------------+---------------+----------------+
| id | department | employee_name | year_published |
+----+------------+---------------+----------------+
|101 | Operations | John Doe      |       2013     |
+----+------------+---------------+----------------+

En este ejemplo, aunque solo cambiamos un elemento, el resultado muestra que dos filas se vieron afectadas porque ELIMINAMOS el registro anterior y luego INSERTAMOS la nueva fila para ocupar su lugar.

Utilice INSERTAR... EN LA ACTUALIZACIÓN DE LA CLAVE DUPLICADA para actualizar el registro si existe; de lo contrario, insértelo en la tabla MySQL

Podemos emplear la declaración y la cláusula INSERT ... ON DUPLICATE KEY UPDATE como un enfoque alternativo para insertar en filas que pueden tener valores duplicados UNIQUE o PRIMARY KEY.

Al emitir únicamente las instrucciones INSERTAR o ACTUALIZAR y nunca ELIMINAR, utilizar INSERTAR... EN LA ACTUALIZACIÓN DE CLAVE DUPLICADA no es destructivo, en contraste con REEMPLAZAR, que es inherentemente dañino debido a ELIMINAR. comandos que ejecuta cuando es necesario.

Por ejemplo, supongamos que tenemos una tabla de empleados con columnas para id, departamento, nombre_del_empleado y año_de_unión. Hemos tomado la decisión de cambiar nuestro departamento y joining_year de id = 101 registro de vuelta al registro original de Operaciones.

La nueva cláusula ON DUPLICATE KEY UPDATE ahora se puede agregar a nuestra declaración original INSERT:

-- Before update
SELECT * from employees where id = 101;
SET @id = 101,
    @department = 'Operations',
    @employee_name = 'John Doe',
    @joining_year = 2013;
INSERT INTO employees
    (id, department, employee_name, joining_year)
VALUES
    (@id, @department, @employee_name, @joining_year)
ON DUPLICATE KEY UPDATE
    department = @department,
    employee_name = @employee_name,
    joining_year = @joining_year;
-- After update
SELECT * from employees where id = 101;

En el ejemplo anterior, hemos optado por usar variables de usuario para evitar declarar los valores reales que deseamos INSERTAR o ACTUALIZAR más de una vez, aunque no es necesario que funcione el método ON ACTUALIZACIÓN DE CLAVE DUPLICADA. Como era la intención.

Ejecute la línea de código anterior en cualquier navegador compatible con MySQL. Mostrará el siguiente resultado:

Producción :

-- Before update
+----+------------+---------------+----------------+
| id | department | employee_name | year_published |
+----+------------+---------------+----------------+
|101 | Technology | John Doe      |       2017     |
+----+------------+---------------+----------------+

Query OK, 1 rows affected (0.00 sec)

-- After update
+----+------------+---------------+----------------+
| id | department | employee_name | year_published |
+----+------------+---------------+----------------+
|101 | Operations | John Doe      |       2013     |
+----+------------+---------------+----------------+
Shraddha Paghdar avatar Shraddha Paghdar avatar

Shraddha is a JavaScript nerd that utilises it for everything from experimenting to assisting individuals and businesses with day-to-day operations and business growth. She is a writer, chef, and computer programmer. As a senior MEAN/MERN stack developer and project manager with more than 4 years of experience in this sector, she now handles multiple projects. She has been producing technical writing for at least a year and a half. She enjoys coming up with fresh, innovative ideas.

LinkedIn

Artículo relacionado - MySQL Update