Contenido de esta guía
Qué hace UPDATE
UPDATE modifica una o varias columnas de las filas que cumplen una condición. Las columnas que no aparecen en SET conservan su valor anterior.
Piensa en la sentencia como dos decisiones separadas: qué valor cambia y qué filas están dentro del alcance. La primera se expresa con SET; la segunda, normalmente, con WHERE.
Sintaxis mínima y orden de revisión
UPDATE tabla
SET columna = nuevo_valor
WHERE condicion;- Escribe primero un
SELECTcon el mismoWHERE. - Comprueba cuántas filas aparecen y si son las correctas.
- Ejecuta el
UPDATEdentro de una transacción cuando el entorno lo permita. - Vuelve a consultar las filas modificadas.
- Confirma con
COMMITo deshaz conROLLBACK.
Regla de seguridad: si no puedes explicar cuántas filas cambiarán, todavía no ejecutes la sentencia.
Ejemplo guiado: probar un cambio reversible
El pedido 102 está pendiente. El siguiente bloque cambia su estado, permite comprobarlo y finalmente recupera el valor original:
BEGIN;
SELECT id, estado
FROM pedidos
WHERE id = 102;
UPDATE pedidos
SET estado = 'enviado'
WHERE id = 102
AND estado = 'pendiente';
SELECT id, estado
FROM pedidos
WHERE id = 102;
ROLLBACK;| id | estado |
|---|---|
| 102 | enviado |
La condición incluye el identificador y el estado esperado. Si otra persona ya hubiera procesado el pedido, la condición dejaría de cumplirse y no se modificaría esa fila. Después de ROLLBACK, el pedido vuelve a estar pendiente.
Actualizar a partir del valor actual
El nuevo valor puede calcularse con el valor existente. Esta consulta suma cinco unidades al stock de cada producto de audio:
UPDATE productos
SET stock = stock + 5
WHERE categoria = 'Audio';Antes de ejecutarla, el SELECT equivalente debe mostrar dos filas: Auriculares y Altavoz. Tras el cambio, sus existencias serían 16 y 5, respectivamente.
Errores frecuentes
Omitir WHERE por accidente
Sin WHERE, la sentencia actualiza todas las filas. No añadas una condición decorativa: copia exactamente el filtro que ya comprobaste con SELECT.
Confiar solo en el mensaje «consulta ejecutada»
Una sentencia válida puede afectar cero filas o muchas más de las esperadas. Comprueba el número de filas afectadas y consulta el resultado antes de confirmar.
Práctica guiada
Activa un cliente solo si está inactivo
Prepara una sentencia que cambie activo a 1 para Pablo Sanz, cuyo identificador es 6. Protege el cambio comprobando también que su valor actual sea 0.
clientes.SET, asigna activo = 1.id = 6 y activo = 0 con AND.Solución razonada
UPDATE clientes
SET activo = 1
WHERE id = 6
AND activo = 0;El identificador limita el cambio a Pablo Sanz y la segunda condición evita sobrescribir una fila que ya estuviera activa. En un entorno real, ejecuta primero el mismo filtro con SELECT y utiliza una transacción.
Compatibilidad entre motores
La forma básica UPDATE ... SET ... WHERE ... es ampliamente portable. Las variantes para actualizar con otras tablas, limitar filas o devolver las filas cambiadas difieren entre PostgreSQL, MySQL, SQLite y SQL Server. No copies una variante específica sin comprobar la documentación de tu motor.
Qué debes recordar
SETdefine el nuevo valor yWHEREcontrola el alcance.- Prueba el filtro con
SELECTantes de modificar. - Comprueba filas afectadas y resultado.
- Usa transacciones para cambios que necesiten revisión.