Lección 8.2: La sentencia UPDATE
En la lección anterior, aprendimos cómo agregar nuevas filas utilizando INSERT INTO. Ahora veamos cómo modificar datos que ya existen con la sentencia UPDATE. Esta es una de las operaciones DML clave que mantiene tu base de datos actualizada y precisa.
Sintaxis Básica
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
UPDATE table_name— especifica la tabla en la que deseas cambiar datos.SET column = value— asigna nuevos valores a una o más columnas.WHERE condition— determina qué filas serán actualizadas.
Reglas Importantes
- Siempre usa
WHERE: Sin una cláusulaWHERE, la sentenciaUPDATEmodificará todas las filas en la tabla. Este es uno de los errores más comunes y peligrosos. - Tipos de Datos: Los nuevos valores deben coincidir con el tipo de dato de la columna.
- Cadenas y Fechas: Los valores de texto y las fechas deben estar entre comillas simples (
'). - Números: Los valores numéricos no requieren comillas.
- Transacciones: En sistemas de producción, se recomienda ejecutar
UPDATEdentro de una transacción para poder revertir cambios en caso de un error.
Ejemplos
Ejemplo 1: Actualizando una Columna
Cambiemos la dirección de correo electrónico de un cliente específico en la tabla customer.
UPDATE customer
SET email = 'new.email@example.com'
WHERE customer_id = 1;
Nota: La condición WHERE customer_id = 1 asegura que solo se cambie un registro específico.
Ejemplo 2: Actualizando Múltiples Columnas a la Vez
Puedes listar múltiples columnas en la cláusula SET, separadas por comas.
UPDATE customer
SET first_name = 'ALICE',
last_name = 'COOPER',
email = 'alice.cooper@example.com'
WHERE customer_id = 42;
Ejemplo 3: Usando el Valor Actual en una Expresión
La sentencia UPDATE te permite calcular un nuevo valor basado en el actual. Por ejemplo, aumentemos la tarifa de alquiler de todas las películas de Comedia en un 10%:
UPDATE film
SET rental_rate = rental_rate * 1.10
WHERE film_id IN (
SELECT f.film_id
FROM film f
JOIN film_category fc ON f.film_id = fc.film_id
JOIN category c ON fc.category_id = c.category_id
WHERE c.name = 'Comedy'
);
Resultado: La tarifa de alquiler de todas las películas de Comedia aumentará en un 10%.
Ejemplo 4: Actualizando Múltiples Filas por Condición
Marquemos a todos los clientes inactivos que no han alquilado nada después de una cierta fecha:
UPDATE customer
SET active = 0
WHERE customer_id NOT IN (
SELECT DISTINCT customer_id
FROM rental
WHERE rental_date >= '2005-08-01'
);
Ejemplo 5: Estableciendo un Valor a NULL
Si una columna permite NULL, puedes limpiarla explícitamente:
UPDATE film
SET original_language_id = NULL
WHERE film_id = 10;
Verificar Antes de Actualizar
Una buena práctica es ejecutar un SELECT con la misma condición WHERE primero, para confirmar que las filas correctas serán afectadas:
-- Primero, verifica qué devuelve el SELECT
SELECT customer_id, first_name, last_name, email
FROM customer
WHERE customer_id = 1;
-- Solo después de verificar, ejecuta el UPDATE
UPDATE customer
SET email = 'new.email@example.com'
WHERE customer_id = 1;
Conclusiones Clave de esta Lección:
- La sentencia
UPDATEmodifica filas existentes en una tabla. - Sin una cláusula
WHERE, todas las filas en la tabla serán actualizadas — siempre verifica que esté presente. - Múltiples columnas pueden ser actualizadas en una sola cláusula
SET, separadas por comas. - Un nuevo valor de columna puede ser calculado a partir de su valor actual (por ejemplo,
price = price * 1.1). - Antes de ejecutar un
UPDATE, se recomienda ejecutar unSELECTcon la misma condición para verificar las filas afectadas.
En la próxima lección, exploraremos la sentencia DELETE — cómo eliminar filas de una tabla de manera segura y controlada.