Aprende SQL · lección gratuita
UPDATE modifica los valores de filas existentes. Cambia columnas de las filas que cumplen una condición WHERE. Sin WHERE, actualiza todas las filas de la tabla — el error más caro de SQL. Aquí siempre trabajamos sobre tablas temporales clonadas de la semilla.
UPDATE tabla SET col1 = v1, col2 = v2 WHERE condición;. El SET lista las columnas a cambiar; WHERE filtra qué filas.WHERE es crítico: sin él, el cambio se aplica a toda la tabla. Antes de un UPDATE masivo, prueba el WHERE con un SELECT que use el mismo filtro.SET: el valor puede ser una expresión que use la propia columna: SET salario = salario * 1.10 (subir 10%), o combinar columnas: SET total = precio - descuento.UPPER, ROUND) y CASE para aplicar reglas distintas según la fila en un solo UPDATE.SET con los valores previos de la fila, así que SET a = b, b = a realmente intercambia (no encadena).El motor recorre las filas que pasan el WHERE y reasigna las columnas del SET. Las expresiones del lado derecho se evalúan fila por fila usando los valores actuales de esa fila antes del cambio. Por eso SET salario = salario + 500 suma 500 al salario de cada fila afectada, individualmente.
Buenas prácticas y errores:
WHERE primero: ejecuta SELECT ... WHERE <misma condición> para ver cuántas/cuáles filas tocarás.UPDATE que no encuentra filas no es un error: simplemente afecta 0 filas.UPDATE puede disparar NOT NULL, UNIQUE o CHECK igual que un INSERT.UPDATE ... FROM otra_tabla permite actualizar usando datos de otra tabla (correlación por WHERE).SELECT id, nombre, cargo, salario FROM empleados WHERE departamento_id = 2 ORDER BY salario DESC
-- Clon de trabajo idempotente con datos reales de la semilla
DROP TABLE IF EXISTS emp_ajuste;
CREATE TABLE emp_ajuste AS SELECT * FROM empleados;
-- UPDATE con WHERE: subir salario fijo a un departamento
UPDATE emp_ajuste SET salario = salario + 500 WHERE departamento_id = 2;
-- UPDATE con expresión y CASE: aumento porcentual según cargo
UPDATE emp_ajuste
SET salario = ROUND(
salario * CASE WHEN cargo LIKE '%Director%' THEN 1.05 ELSE 1.10 END
);
SELECT id, nombre, cargo, salario FROM emp_ajuste WHERE departamento_id = 2 ORDER BY id;
💡 El error nº1 conUPDATEes olvidar elWHEREy modificar toda la tabla. Hábito de oro: escribe primeroSELECT * FROM t WHERE <cond>;, comprueba el resultado, y solo entonces cámbialo porUPDATE ... SET ....
| Forma | Qué hace |
|---|---|
UPDATE t SET a = 1 WHERE id = 5; | Cambia una columna de filas filtradas |
UPDATE t SET a = a + 10 WHERE ...; | Usa la propia columna en una expresión |
UPDATE t SET a=1, b=2 WHERE ...; | Cambia varias columnas a la vez |
UPDATE t SET a = CASE WHEN ... END; | Aplica reglas distintas por fila |
UPDATE t SET a = 0; | ⚠️ Sin WHERE: afecta TODAS las filas |
---