Pregunta 1¿Cuál describe correctamente los papeles de SET y WHERE en una sentencia UPDATE?
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;
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.
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".
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;
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).
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;
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.
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.
Verificación de conocimientos
Responde cada pregunta una a una.
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?