Aprende leyendo en orden

UPDATE y DELETE — actualizar y eliminar filas

Aprende SQL UPDATE y DELETE desde lo básico. Cubre actualizaciones de varias columnas con SET, eliminaciones acotadas con WHERE y qué pasa cuando olvidas WHERE — todo ejecutándose en vivo en tu navegador.

UPDATE — reescribir filas existentes

INSERT servía para "añadir nuevas filas". UPDATE es la operación para reescribir los valores de filas que ya existen. Cambiar el estado de un miembro, revisar el precio de un producto, actualizar el contador de compras — UPDATE forma parte de la operación diaria en cualquier app en producción.

La forma básica es UPDATE table_name SET col = val WHERE condition;. SET dice "qué columna recibe qué valor" y WHERE dice "qué filas se ven afectadas".

-- Reescribe el status de customer donde id = 1 a 'active'
UPDATE customer SET status = 'active' WHERE id = 1;

-- Comprueba el resultado
SELECT * FROM customer;
Estructura de una sentencia UPDATE
UPDATE tableSET col = valWHERE conditionTabla objetivocustomerCambiostatus = 'active'Fila objetivoid = 1Tabla objetivoReescribe una columnaReduce filas
UPDATE table_name es la tabla objetivo, SET col = val es el cambio, y WHERE condition reduce a qué filas. Familiarízate con la posición y el papel de cada uno.

Olvidar WHERE actualiza todas las filas

Quita el WHERE de UPDATE customer SET status = 'active' WHERE id = 1; (convirtiéndolo en UPDATE customer SET status = 'active';) y todas las filas de customer ven su status reescrito a 'active'. No hay error, que es exactamente lo que hace que esta sea una forma fácil de corromper silenciosamente datos de producción.

Imagina cambiar a un cliente (Alice) de pending a active. (Ejecútalo correctamente y aparecerá la explicación.)

① Primero ejecuta SELECT name, status FROM customer WHERE id = 1; y confirma que el status de Alice es 'pending' (todavía no active).

② Actualiza la columna status a 'active' para la fila en customer donde `id = 1` (Alice).

③ Por último, ejecuta SELECT * FROM customer; y confirma que solo cambió el status de Alice a 'active', mientras que Bob y Carol no cambiaron.

(WHERE aquí usa la misma sintaxis de filtro que viste en el artículo de SELECT.)

Editor SQL

Ejecutar una consulta para ver el resultado

Actualizar varias columnas a la vez

Al listar pares `col = val` separados por comas en la cláusula SET, puedes actualizar varias columnas a la vez: SET col1 = val1, col2 = val2, ....

El lado derecho también puede ser una expresión que incluye la propia columna. SET price = price + 100 significa "reescribe el price de la fila objetivo a su price actual más 100".

Variantes de la cláusula SET
Una sola columnaSET status = 'active'Varias columnas(separadas por comas)SET price = 200, stock = 100Expresión(se refiere a sí misma)SET price = price + 100CombinaciónSET price = price + 100, stock = stock - 10
SET puede contener un único par col = val o varios separados por comas, y el lado derecho también puede ser una expresión.
-- Actualiza varias columnas a valores absolutos a la vez
UPDATE inventory SET price = 200, stock = 100 WHERE id = 2;

-- Actualiza con expresiones (referenciando los valores existentes)
UPDATE inventory SET price = price + 100, stock = stock - 10 WHERE id = 2;

Imagina una pantalla de inventario donde quieres revisar el precio y el stock de la goma.

① Para la fila en inventory donde `id = 2` (Goma), actualiza price a 200 y stock a 100 al mismo tiempo.

② Por último, ejecuta SELECT * FROM inventory; y confirma que solo id=2 se actualizó a los nuevos valores, mientras que id=1 (Lápiz) e id=3 (Cuaderno) no cambiaron.

Editor SQL

Ejecutar una consulta para ver el resultado

Imagina: "sube el precio del lápiz (id=1) en 100 y reduce su stock en 10". Poner una expresión que referencia la propia columna en el lado derecho de SET te permite hacer cambios relativos al valor actual.

① Para la fila en inventory donde `id = 1` (Lápiz), actualiza ambas columnas a la vez con `price = price + 100` y `stock = stock - 10`.

② Por último, ejecuta SELECT * FROM inventory WHERE id = 1; y confirma que el price del lápiz es 180 y el stock es 190.

Editor SQL

Ejecutar una consulta para ver el resultado

DELETE — eliminar filas

DELETE es la operación para eliminar filas de una tabla. La forma básica es DELETE FROM table_name WHERE condition;, con WHERE reduciendo a las filas objetivo. A diferencia de SELECT, no hay lista de columnas (SELECT col1, col2) — DELETE elimina filas enteras.

La definición de la tabla (la estructura de columnas) permanece, así que puedes hacer INSERT en la misma tabla después de eliminar. Para eliminar la propia tabla, usa DROP TABLE / TRUNCATE (cubierto en el siguiente artículo).

Estructura de una sentencia DELETE
DELETE FROM tableWHERE conditionTabla objetivosubscriptionFilas a eliminarstatus = 'expired'Tabla objetivoReduce filas
DELETE FROM table_name es la tabla objetivo; WHERE condition decide qué filas eliminar. No hay equivalente de la lista de columnas de SELECT ni de la cláusula SET de UPDATE en DELETE.
-- Elimina todas las suscripciones expiradas (status = 'expired')
DELETE FROM subscription WHERE status = 'expired';

-- Comprueba el resultado (solo quedan las filas supervivientes)
SELECT * FROM subscription;

Imagina limpiar suscripciones expiradas en bloque.

① De subscription, elimina todas las filas donde `status` sea `'expired'`.

② Por último, ejecuta SELECT * FROM subscription; y confirma que los únicos supervivientes son las 2 filas donde status = 'active' (Bob / Dave).

(Cada fila que coincida con la condición WHERE es objetivo — sin especificar id, varias filas coincidentes desaparecen a la vez.)

Editor SQL

Ejecutar una consulta para ver el resultado

Cuidado con WHERE faltante — la trampa de actualizar/eliminar todas las filas

Olvidar WHERE es el accidente más común con UPDATE y DELETE. Sin WHERE, la sintaxis sigue siendo válida — y el objetivo se expande a todas las filas de la tabla. UPDATE table SET col = val; reescribe todas las filas al mismo valor; DELETE FROM table; vacía la tabla.

Incluso si te das cuenta inmediatamente, no puedes deshacerlo después de que el cambio se haya confirmado. La regla operativa básica en producción es ejecutar siempre el mismo WHERE como un `SELECT` primero para confirmar visualmente las filas objetivo antes de reescribir.

Con WHERE vs. sin WHERE
DELETE FROM cache_entry WHERE id = 1;→ Solo elimina id=1(seguro — acotado por WHERE)DELETE FROM cache_entry;→ Todas las filas eliminadas(la tabla queda vacía)UPDATE customer SET status = 'active' WHERE id = 1;→ Solo actualiza id=1(otros customer sin cambios)UPDATE customer SET status = 'active';→ Cada status pasa a 'active'(todos los customer pasan a active)
Solo tener o no WHERE cambia la operación entre "actuar sobre una fila objetivo" y "actuar sobre todas las filas a la vez". El radio de impacto al olvidarlo es, literalmente, la tabla entera.

En producción, confirma las filas objetivo con SELECT primero

Para UPDATE / DELETE en una base de datos en producción, ejecuta primero el mismo WHERE como un SELECT y confirma visualmente que las filas objetivo son las que esperas antes de pasarlo a la reescritura. El procedimiento de dos pasos:

1. Ejecuta SELECT * FROM table_name WHERE condition; para confirmar las filas objetivo (¿el número de filas y los valores coinciden con lo que esperabas?)

2. Si todo se ve bien, cambia el mismo WHERE a UPDATE table_name SET col = val WHERE condition; o DELETE FROM table_name WHERE condition; y ejecuta

Como la cláusula WHERE se reutiliza vía copiar-pegar, esto también reduce el tipo de accidente en el que WHERE se cae accidentalmente durante la reescritura.

Imagina: "limpia la caché y reconstrúyela desde cero". La tabla cache_entry empieza el artículo con 3 filas en caché.

Sin escribir WHERE, ejecuta un DELETE que elimine todas las filas de cache_entry.

② Por último, ejecuta SELECT * FROM cache_entry; y confirma que el resultado es 0 filas (tabla vacía).

(DELETE sin WHERE es una receta para accidentes en producción — aquí lo dejamos deliberadamente como ejercicio final para que sientas su comportamiento de primera mano.)

Editor SQL

Ejecutar una consulta para ver el resultado
QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1¿Cuál describe correctamente los papeles de SET y WHERE en una sentencia UPDATE?

Pregunta 2¿Cuál es la forma correcta de actualizar tanto name como email para la fila en customer donde id = 1 al mismo tiempo?

Pregunta 3¿Qué pasa cuando ejecutas DELETE FROM product; sin WHERE?