Saltar al contenido

Mentoring

UPDATE en MySQL: cómo modificar datos de forma segura

Aprende a usar UPDATE en MySQL para modificar una o varias filas de una tabla de forma segura.

Mentoring 3 min de lectura

Actualizado el

UPDATE en MySQL

UPDATE modifica filas existentes. Antes de ejecutarlo, comprueba con un SELECT el mismo WHERE: si omites WHERE, se actualizarán todas las filas.

Si quieres insertar una fila cuando aún no existe y actualizarla cuando ya existe, consulta INSERT ... ON DUPLICATE KEY UPDATE.

Sintaxis básica

UPDATE nombre_tabla
SET columna1 = valor1, columna2 = valor2
WHERE condicion;

La parte más importante es WHERE. Si la omites, MySQL actualizará todas las filas de la tabla.

Comprobar las filas con SELECT

Ejecuta primero un SELECT con exactamente la misma condición que usarás en el UPDATE:

SELECT *
FROM clientes
WHERE id = 1;

Puedes construir esa comprobación con las cláusulas descritas en la guía de SELECT en MySQL.

Si el resultado es correcto, ejecuta el UPDATE.

Actualizar una fila

UPDATE clientes
SET email = '[email protected]', telefono = '111222333'
WHERE id = 1;

Esta consulta modifica solo el cliente con id = 1.

Actualizar varias filas

UPDATE productos
SET precio = precio * 1.10
WHERE categoria = 'Electrónica';

Aquí se aumenta un 10% el precio de todos los productos de la categoría Electrónica.

También puedes combinar condiciones:

UPDATE pedidos
SET estado = 'Entregado'
WHERE cliente_id IN (1, 2)
  AND fecha < '2023-01-01';

Transacciones

En tablas con un motor transaccional como InnoDB puedes revisar el cambio antes de confirmarlo:

START TRANSACTION;

UPDATE clientes
SET email = '[email protected]'
WHERE id = 1;

SELECT id, email
FROM clientes
WHERE id = 1;

Si el resultado es correcto, ejecuta COMMIT; si no, ROLLBACK para deshacer el cambio. Esto presupone un motor transaccional como InnoDB.

Actualizar con ORDER BY y LIMIT

En actualizaciones de una sola tabla puedes usar ORDER BY y LIMIT. El UPDATE multitabla no admite estas cláusulas.

UPDATE tareas
SET estado = 'procesando'
WHERE estado = 'pendiente'
ORDER BY fecha_creacion ASC
LIMIT 10;

Esto actualiza solo las 10 tareas pendientes más antiguas.

Actualizar usando otra tabla

MySQL permite actualizar una tabla usando datos de otra mediante JOIN.

UPDATE empleados e
JOIN departamentos d ON e.departamento_id = d.id
SET e.salario = e.salario * 1.05
WHERE d.nombre = 'Ventas';

Esta consulta sube un 5% el salario de los empleados del departamento de ventas.

Consultas parametrizadas

No construyas consultas concatenando texto desde una aplicación. Usa parámetros, presentados aquí como marcadores de una consulta preparada:

UPDATE clientes
SET email = ?
WHERE id = ?;

Los ? los sustituye el driver o la API de base de datos; no son sintaxis ejecutable directamente en el cliente MySQL.

Checklist final antes de actualizar

  • Comprueba el WHERE con un SELECT previo.
  • Usa parámetros si la consulta viene de una aplicación.
  • Si el cambio es delicado y el motor es transaccional, envuélvelo en una transacción.
  • Haz copia de seguridad antes de actualizaciones masivas.