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
:
- Se ejecuta una instrucción
INSERT
típica porque no se pudo descubrir ninguna fila de datos con los valores deseados. - 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 laINSERCIÓ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 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