Actualización de registros de una tabla MySQL

La actualización de registros de una tabla MySQL, permite la edición de los valores de una o más filas de dicha tabla.

Actualización de registros de una tabla MySQL
Actualización de registros de una tabla MySQL

Una tabla se actualiza con el comando UPDATE, cuya sintaxis básica es:

UPDATE <nombre tabla> SET campo1=valor1, campo2=valor2, ...,campo-n=valor-n WHERE <condicion>

Los pares campo = valor, indican los campos que se modifican de las filas que cumplen con la <condicion>, indicada luego de la cláusula WHERE.

Es muy importante validar la <condición> de la edición, porque indica sobre el subconjunto de datos donde se realizará la modificación de los datos. Un UPDATE sin condición, o con una condición incorrecta, puede implicar una edición en masa de muchos registros, que luego se puede volver muy compleja de recuperar.

Por ejemplo teniendo la tabla empleados:

Tabla empleados
Tabla empleados

Si deseamos modificar la cédula de «Martín Carvajal», por 9988, usamos el siguiente comando:

UPDATE empleados SET cedula='9988' WHERE cedula='9987';

Quedando la tabla de la siguiente forma:

Actualización simple de registro
Actualización simple de registro

Actualización de registros a partir de una consulta

Por otro lado, un UPDATE puede recibir el valor de un campo a partir de una consulta, donde ésta debe devolver un valor único, es decir, un solo campo, bajo una sola fila.

Para mostrar un ejemplo, consideremos una segunda tabla llamada salarios:

tabla salarios
Tabla salarios

En este caso deseamos cambiar el campo nombre de la tabla salarios, con el valor del campo nombre de la tabla empleados, todo a partir del número de cédula. Para este fin usamos la siguiente SQL:

UPDATE salarios S SET nombre=(SELECT nombre from empleados E where E.cedula=S.cedula)

Quedando la tabla salarios con las siguientes modificaciones:

Actualización de registros a partir de consulta
Actualización de registros a partir de consulta

En este ejemplo, el valor que se le pone al campo nombre de la tabla salarios, proviene de una consulta que trae el nombre de la tabla empleados, donde la cédula del empleado es igual a la cédula en la tabla salarios. Esto es válido siempre y cuando la cédula sea un valor único en la tabla empleados.

Actualización de registros usando las cláusulas JOIN

Una actualización también se puede realizar usando las cláusulas JOIN, con el fin de modificar los registros que cumplan con las condiciones de campos coincidentes según sean INNER, LEFT o RIGHT JOIN. La diferencia de estas cláusulas puedes consultarla en el artículo Usos y diferencias de inner, left y right join.

Por ejemplo, si ahora tenemos la tabla salarios de la siguiente forma:

Tabla salarios
Tabla salarios

y queremos ahora poner en el campo nombre de la tabla salarios, el apellido de la tabla empleados, la SQL con la cláusula JOIN sería:

UPDATE salarios S INNER JOIN empleados E ON S.cedula=E.cedula SET S.nombre=E.apellido;

Quedando ahora la tabla modificada de la siguiente forma:

Actualización de registros usando Join
Actualización de registros usando Join

En este caso, primero se determinan los registros de la tabla salarios y de la tabla empleados donde la cédula sea la misma (INNER JOIN), a estos registros se les aplica la actualización del campo nombre de la tabla salarios, con el valor del campo apellido de la tabla empleados.

A cada una de estas sentencias, se le puede aplicar la cláusula WHERE, si se desea hacer este cambio en un subconjunto más pequeño de filas, y no en toda la tabla.

Uso de Insert y Update para copiar filas de una tabla en ella misma

En algunos casos requerimos copiar filas de una tabla en ella misma, cambiando algunos valores de las filas copiadas.

En este ejemplo usaremos una tabla temporal, con el fin de copiar ahi las filas que deseamos duplicar, para hacer las modificaciones respectivas en ella, con el fin de no generar conflicto con las restricciones de llaves primarias e índices únicos, para finalmente copiar estas filas modificadas en la misma tabla de origen. Estos son los pasos para realizar esta operación, considerando nuestras tablas de ejemplo:

1- Identificamos el registro o los registros que deseamos copiar de la tabla, en este ejemplo de la tabla salarios, mediante la siguiente consulta:

SELECT * FROM salarios;

Supongamos que deseamos copiar los datos de la fila, donde id=3:

Fila a copiar en la misma tabla
Fila a copiar en la misma tabla

2- Ahora crearemos una tabla temporal tmptable_1 , donde copiaremos los registros de la tabla salarios, donde el id sea 3:

CREATE TEMPORARY TABLE tmptable_1 SELECT * FROM salarios WHERE id = 3;

Veremos que la tabla tmptable_1 ya tiene el valor que requerimos:

SELECT * FROM tmptable_1;
Valores copiados en la tabla temporal
Valores copiados en la tabla temporal

3- Necesitamos cambiar algunos valores de la fila copiada. Es importante poner el id en NULL, para no generar conflicto con la llave primaria de la tabla salarios. Y finalmente cambiamos los valores de los campos salario, mes y anio.

UPDATE tmptable_1 SET id = NULL, salario='8900', mes=11,anio=2021;

Ahora el registro en la tabla temporal queda modificado así:

Valores modificados en la tabla temporal
Valores modificados en la tabla temporal

4- En seguida tenemos que insertar los registros de la tabla temporal tmptable_1 a la tabla salarios:

INSERT INTO salarios SELECT * FROM tmptable_1; 

Quedando ahora la tabla salarios, con una fila adicional, copiada a partir del registro con id=3:

Valor copiado en la tabla salarios
Valor copiado en la tabla salarios

5- Finalmente eliminamos la tabla temporal:

DROP TEMPORARY TABLE IF EXISTS tmptable_1;

El uso de UPDATE para la edición de los valores de los registros de una tabla, es un aspecto que facilita enormemente la modificación de grandes volúmenes de información, bajo consideraciones controladas y condiciones que identifican los subconjuntos de registros donde se aplicarán los cambios.

Este artículo hace parte del sistema de divulgación de conocimiento de ITSoftware.

Si te gustó, por favor no olvides compartirlo en las redes sociales. 😉

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.