En el artículo anterior aprendimos a crear datos con INSERT INTO. Ahora vamos a ver cómo modificarlos.
Porque los datos no son estáticos. La gente se muda de casa, los productos cambian de precio y los estados de los pedidos avanzan.
La sentencia encargada de esta tarea es UPDATE.
UPDATE es una herramienta potente, pero también una de las más peligrosas en SQL. Un INSERT mal hecho solo añade basura. Pero un UPDATE mal hecho puede cargarse todos tus datos irremediablemente.
Sintaxis básica
La estructura de una sentencia de actualización tiene tres partes clave:
UPDATE NombreTabla
SET Columna = NuevoValor
WHERE Condicion;
- UPDATE: Qué tabla queremos modificar.
- SET: Qué columnas queremos cambiar y qué nuevo valor les damos.
- WHERE: A qué filas afecta el cambio.
Por ejemplo, Imagina que el cliente con ID 105 nos llama porque ha cambiado su número de teléfono.
UPDATE Clientes
SET Telefono = '600-123-456'
WHERE ClienteID = 105;
SQL Server buscará la fila donde el ID sea 105, cambiará el valor de la columna Telefono y dejará el resto de datos de esa fila intactos.
El peligro de olvidarse el WHERE
Este es el consejo más importante que os daremos en este módulo: Cuidado con ejecutar un UPDATE sin WHERE.
Si olvidas la condición WHERE (copias de aqui allá, vas con prisas, no te das cuenta, le das a ejecutar), SQL Server actualizará TODAS las filas de la tabla.
-- ☠️ ¡PELIGRO! Esto pondrá el mismo teléfono a TODOS tus clientes
UPDATE Clientes
SET Telefono = '600-123-456';
No hay un mensaje de “¿Estás seguro?”. Vas a borrar todos tus datos, destruir el planeta, y te van a despedir. No.
SQL Server simplemente lo ejecutará y te dirá: “5000 filas afectadas”. Y tú te quedarás con cara de calamar, sin saber que hacer.
El truco del SELECT previo: Antes de ejecutar un UPDATE, escribe siempre un SELECT con el mismo WHERE para comprobar que vas a modificar exactamente los registros que crees.
Actualizar múltiples columnas
Podemos modificar varios campos de una misma fila en una sola sentencia, separándolos por comas.
-- Actualizamos la dirección y la ciudad del cliente
UPDATE Clientes
SET Direccion = 'Calle Nueva 123',
Ciudad = 'Barcelona',
CodigoPostal = '08001'
WHERE ClienteID = 105;
Actualización con expresiones
No estamos limitados a poner valores fijos (literales). Podemos usar el valor actual de la columna para calcular el nuevo valor. Esto es utilísimo para incrementos o cambios porcentuales.
Ejemplo: Subida de precios por inflación Queremos subir el precio de todos los productos un 10%.
UPDATE Productos
SET Precio = Precio * 1.10;
-- Aquí NO usamos WHERE intencionadamente, porque queremos afectar a todos
Ejemplo: Corrección de stock Ha habido una venta y restamos 5 unidades al stock actual.
UPDATE Inventario
SET Cantidad = Cantidad - 5
WHERE ProductoID = 20;
UPDATE con JOIN (Exclusivo de T-SQL)
A veces, la condición para actualizar una tabla depende de información que está en otra tabla.
El estándar SQL ANSI nos obligaría a usar subconsultas, pero T-SQL permite una sintaxis propietaria muy cómoda: usar JOIN dentro del UPDATE.
Por ejemplo, queremos subir un 5% el precio, pero solo a los productos de la categoría “Electrónica”.
UPDATE P
SET P.Precio = P.Precio * 1.05
FROM Productos P
INNER JOIN Categorias C ON P.CategoriaID = C.CategoriaID
WHERE C.Nombre = 'Electrónica';
Fíjate en la sintaxis:
- Especificamos el alias
Pen elUPDATE. - Usamos
FROMyJOINpara relacionarProductosconCategorias. - Filtramos por el nombre de la categoría.
¿Quéocurre si falla un UPDATE?
Al igual que con el INSERT, un UPDATE puede fallar si el nuevo valor viola alguna restricción:
- Si intentas cambiar un
IDa uno que ya existe (violación de PK). - Si intentas poner un
NULLen una columnaNOT NULL. - Si rompes una regla
CHECK(ej: poner un precio negativo).
Si ocurre un error, la operación se cancela y los datos vuelven a su estado original (atomicidad).
