🙏 Realmente necesitamos su apoyo. Necesitamos financiamiento para continuar nuestra misión: publicar nuevas lecciones y mejorar la plataforma. Si puede, por favor apoye el proyecto con una donación. Ayude al proyecto ahora →
Código SQL copiado al portapapeles

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áusula WHERE, la sentencia UPDATE modificará 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 UPDATE dentro 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 UPDATE modifica 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 un SELECT con 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.