¿Cómo actualizar una base de datos en SQL?

Modificar Registros en SQL: La Clave UPDATE

Valoración: 3.94 (4725 votos)

En el vasto universo de las bases de datos relacionales, mantener la información precisa y actualizada es fundamental. Los datos cambian constantemente, y es necesario contar con herramientas que nos permitan reflejar esas modificaciones de manera eficiente y segura. Una de las sentencias más importantes en SQL para esta tarea es la sentencia UPDATE.

UPDATE es la instrucción que nos permite alterar los valores de uno o más registros ya existentes dentro de una tabla. Ya sea para corregir un error, actualizar un precio, o modificar el estado de un pedido, la sentencia UPDATE es tu aliada indispensable. Es crucial entender cómo funciona y, sobre todo, cómo utilizarla correctamente para evitar alteraciones no deseadas en tus datos.

¿Podemos alterar una base de datos en MySQL?
ALTER DATABASE permite modificar las características generales de una base de datos . Estas características se almacenan en el diccionario de datos. Esta instrucción requiere el privilegio ALTER en la base de datos. ALTER SCHEMA es sinónimo de ALTER DATABASE.
Índice de Contenido

Entendiendo la Sentencia UPDATE en SQL

La sentencia UPDATE se utiliza específicamente para modificar los datos de filas existentes en una tabla. Es una operación de manipulación de datos (DML - Data Manipulation Language) que te permite cambiar los valores de una o más columnas en una o más filas.

La estructura básica de la sentencia UPDATE es la siguiente:

UPDATE nombre_tabla
SET columna1 = nuevo_valor1, columna2 = nuevo_valor2, ...
WHERE condicion;

Analicemos sus componentes clave:

  • UPDATE nombre_tabla: Indica la tabla cuyos registros deseas modificar. Debes especificar el nombre exacto de la tabla.
  • SET columna1 = nuevo_valor1, columna2 = nuevo_valor2, ...: La cláusula SET es donde especificas las columnas que deseas modificar y los nuevos valores que les asignarás. Puedes actualizar una o varias columnas en la misma sentencia, separándolas por comas. Los nuevos valores pueden ser valores literales (números, cadenas de texto, fechas), resultados de expresiones o incluso valores de otras columnas o subconsultas.
  • WHERE condicion: Esta cláusula es opcional, pero extremadamente importante. La cláusula WHERE especifica qué filas de la tabla deben ser actualizadas. Solo las filas que cumplan la condición especificada serán afectadas por la operación UPDATE.

¡La Cláusula WHERE es Tu Mejor Amiga!

La importancia de la cláusula WHERE no puede ser subestimada. Si omites la cláusula WHERE en una sentencia UPDATE, ¡la operación afectará a TODOS los registros de la tabla! Esto puede tener consecuencias catastróficas si no es tu intención. Por ejemplo, si olvidas el WHERE y ejecutas UPDATE productos SET precio = 0;, de repente todos tus productos costarán cero. Siempre piensa dos veces y, si es posible, prueba tu condición WHERE con un SELECT antes de ejecutar el UPDATE definitivo.

Ejemplos Prácticos de UPDATE

Para ilustrar el uso de la sentencia UPDATE, utilizaremos una tabla de ejemplo llamada geeksforgeeks. Supongamos que esta tabla almacena información sobre usuarios de una plataforma de aprendizaje:

Creación de la tabla y datos de ejemplo:

CREATE TABLE geeksforgeeks(
id varchar(100) PRIMARY KEY,
name varchar(100),
monthly_score int,
contest_rank int,
courses_enrolled int
);

INSERT INTO geeksforgeeks(id, name, monthly_score, contest_rank, courses_enrolled)
VALUES('vish3001', 'Vishu', 50, 1, 10);
INSERT INTO geeksforgeeks(id, name, monthly_score, contest_rank, courses_enrolled)
VALUES('Aayush05', 'Aayush', 48, 2, 8);
INSERT INTO geeksforgeeks(id, name, monthly_score, contest_rank, courses_enrolled)
VALUES('Neeraj50', 'Neeraj', 46, 3, 6);
INSERT INTO geeksforgeeks(id, name, monthly_score, contest_rank, courses_enrolled)
VALUES('Sumit65', 'Sumit', 45, 4, 5);
INSERT INTO geeksforgeeks(id, name, monthly_score, contest_rank, courses_enrolled)
VALUES('Harsh45', 'Harsh', 42, 5, 7);

Tabla inicial:

idnamemonthly_scorecontest_rankcourses_enrolled
vish3001Vishu50110
Aayush05Aayush4828
Neeraj50Neeraj4636
Sumit65Sumit4545
Harsh45Harsh4257

Ejemplo 1: Actualizar una Sola Columna para una Fila Específica

Queremos cambiar el rango en el concurso (contest_rank) del usuario con id 'Neeraj50' a 10.

UPDATE geeksforgeeks
SET contest_rank = 10
WHERE id = 'Neeraj50';

Después de la actualización, la tabla se verá así:

idnamemonthly_scorecontest_rankcourses_enrolled
vish3001Vishu50110
Aayush05Aayush4828
Neeraj50Neeraj46106
Sumit65Sumit4545
Harsh45Harsh4257

Observa cómo solo la fila con id = 'Neeraj50' fue modificada gracias a la cláusula WHERE.

Ejemplo 2: Actualizar Múltiples Columnas

Ahora, supongamos que queremos actualizar tanto el rango del concurso (contest_rank) como los cursos inscritos (courses_enrolled) para el usuario con id 'Sumit65'.

UPDATE geeksforgeeks
SET contest_rank = 55, courses_enrolled = 15
WHERE id = 'Sumit65';

Tabla después de la actualización:

idnamemonthly_scorecontest_rankcourses_enrolled
vish3001Vishu50110
Aayush05Aayush4828
Neeraj50Neeraj46106
Sumit65Sumit455515
Harsh45Harsh4257

Podemos ver que ambas columnas especificadas en la cláusula SET fueron actualizadas para la fila que cumplió la condición WHERE.

Ejemplo 3: Actualizar con Valores de Tipo Cadena

La sentencia UPDATE también funciona perfectamente con valores de tipo cadena (texto). Cambiemos el nombre del usuario con id 'vish3001' a 'Vishu Vaishnav'.

UPDATE geeksforgeeks
SET name = 'Vishu Vaishnav'
WHERE id = 'vish3001';

Tabla resultante:

idnamemonthly_scorecontest_rankcourses_enrolled
vish3001Vishu Vaishnav50110
Aayush05Aayush4828
Neeraj50Neeraj46106
Sumit65Sumit455515
Harsh45Harsh4257

El nombre ha sido actualizado correctamente.

Ejemplo 4: Actualizar con Expresiones en la Cláusula SET

No solo puedes asignar valores fijos, sino también resultados de expresiones. Incrementemos la puntuación mensual (monthly_score) en 1 punto para todos los registros.

UPDATE geeksforgeeks
SET monthly_score = monthly_score + 1;

¡Advertencia! En este ejemplo, no usamos la cláusula WHERE. Esto significa que la operación afectará a TODAS las filas de la tabla. La puntuación de cada usuario se incrementará en 1.

idnamemonthly_scorecontest_rankcourses_enrolled
vish3001Vishu Vaishnav51110
Aayush05Aayush4928
Neeraj50Neeraj47106
Sumit65Sumit465515
Harsh45Harsh4357

Como puedes ver, el monthly_score de cada fila ha sido incrementado en 1.

Ejemplo 5: Actualizar Múltiples Filas con Condición Compuesta

Podemos usar condiciones más complejas en la cláusula WHERE, combinando criterios con operadores lógicos como AND y OR. Incrementemos el rango del concurso en 5 y los cursos inscritos en 10 para el usuario con id 'vish3001' O el usuario cuyo nombre sea 'Harsh'.

¿Cómo actualizo los datos de una tabla desde otra tabla en SQL?
La instrucción SQL UPDATE se utiliza para modificar registros existentes en una tabla. Al combinarse con el comando SET, especifica qué columnas y valores deben actualizarse. Para actualizar una tabla según los valores de otra, la instrucción incluye una cláusula JOIN para buscar coincidencias en las filas correspondientes .
UPDATE geeksforgeeks
SET contest_rank = contest_rank + 5, courses_enrolled = courses_enrolled + 10
WHERE id = 'vish3001' OR name = 'Harsh';

Tabla después de esta actualización:

idnamemonthly_scorecontest_rankcourses_enrolled
vish3001Vishu Vaishnav51620
Aayush05Aayush4928
Neeraj50Neeraj47106
Sumit65Sumit465515
Harsh45Harsh431017

Las filas correspondientes a 'vish3001' y 'Harsh' han sido modificadas según la condición compuesta.

Actualizando Todos los Registros de una Tabla

Aunque ya vimos un ejemplo de esto, es un caso tan particular y con tanto impacto que merece ser tratado con especial atención. Actualizar todas las filas de una tabla es necesario cuando se aplica un cambio universal a los datos, como ajustar un impuesto para todos los productos, o establecer un valor por defecto en una nueva columna para los registros existentes.

La sintaxis, como vimos, es simplemente la sentencia UPDATE con la cláusula SET, pero SIN la cláusula WHERE:

UPDATE nombre_tabla
SET columna1 = nuevo_valor1, columna2 = nuevo_valor2, ...;

Veamos otro ejemplo, utilizando una tabla diferente llamada products.

Creación y llenado de la tabla products:

CREATE TABLE products(
product_id int PRIMARY KEY,
product_name varchar(45),
product_cost float
);

INSERT INTO products VALUES
(1001,'Colgate Toothpaste', 2.25),
(1002, 'Sensodyne Toothpaste', 2.30),
(1003, 'Listrine Mouthwash', 1.75),
(1004, 'T-Shirt', 1.75),
(1005, 'Pants', 2.35);

Tabla products inicial:

product_idproduct_nameproduct_cost
1001Colgate Toothpaste2.25
1002Sensodyne Toothpaste2.30
1003Listrine Mouthwash1.75
1004T-Shirt1.75
1005Pants2.35

Ahora, actualicemos el costo de todos los productos a 4.00.

UPDATE products
SET product_cost = 4.00;

Tabla products después de actualizar todos los registros:

product_idproduct_nameproduct_cost
1001Colgate Toothpaste4.00
1002Sensodyne Toothpaste4.00
1003Listrine Mouthwash4.00
1004T-Shirt4.00
1005Pants4.00

Como se esperaba, el costo de cada producto en la tabla ha sido modificado al nuevo valor. Esta es la forma más sencilla de realizar un cambio masivo cuando el mismo valor o expresión aplica a toda la tabla.

Actualizando Registros Específicos con WHERE (Tabla Products)

Para contrastar con la actualización de todos los registros, veamos cómo actualizar solo un registro en la tabla products. Cambiemos el costo del producto con product_id 1001 a 4.50.

UPDATE products
SET product_cost = 4.50
WHERE product_id = 1001;

Tabla products después de esta actualización:

product_idproduct_nameproduct_cost
1001Colgate Toothpaste4.50
1002Sensodyne Toothpaste4.00
1003Listrine Mouthwash4.00
1004T-Shirt4.00
1005Pants4.00

Solo el registro con product_id = 1001 vio su costo modificado. Esto refuerza la idea de que la cláusula WHERE es esencial para un control granular sobre qué registros son actualizados.

Consideraciones Adicionales: La Cláusula IGNORE (MySQL)

Algunos sistemas de bases de datos, como MySQL, ofrecen cláusulas adicionales que modifican el comportamiento estándar de UPDATE. Una de ellas es la cláusula IGNORE.

Cuando se utiliza UPDATE IGNORE, si una operación de actualización resulta en un error (por ejemplo, una violación de una restricción de clave única o un error de conversión de datos), la fila que causa el error se ignora y la operación continúa con las siguientes filas, en lugar de detenerse y revertir toda la sentencia (dependiendo del modo SQL y si estás en una transacción).

Sintaxis (MySQL):

UPDATE IGNORE nombre_tabla
SET columna1 = nuevo_valor1, ...
WHERE condicion;

El uso de IGNORE puede ser útil en ciertos escenarios donde prefieres que la operación complete la mayoría de las actualizaciones posibles a pesar de algunos errores aislados, pero debe usarse con precaución, ya que puede ocultar problemas potenciales en tus datos o esquema.

Preguntas Frecuentes sobre UPDATE

Aquí respondemos algunas preguntas comunes sobre la sentencia UPDATE:

  • ¿Qué hace exactamente la sentencia UPDATE?
    Modifica los valores de columnas en filas existentes dentro de una tabla.
  • ¿Cuál es la diferencia entre UPDATE y INSERT?
    INSERT agrega nuevas filas a una tabla, mientras que UPDATE modifica filas que ya existen.
  • ¿Qué hace la cláusula SET en un UPDATE?
    Especifica las columnas que se van a modificar y los nuevos valores que se les asignarán.
  • ¿Qué pasa si ejecuto un UPDATE sin la cláusula WHERE?
    TODOS los registros de la tabla serán modificados según lo especificado en la cláusula SET.
  • ¿Es reversible una operación de UPDATE?
    Por defecto, una vez que una sentencia UPDATE se ejecuta y la transacción se confirma, los cambios son permanentes y no se pueden deshacer directamente con SQL. Sin embargo, si estás dentro de una transacción y no la has confirmado, puedes usar ROLLBACK para revertir los cambios. Es por esto que, para operaciones críticas, es recomendable ejecutarlas dentro de una transacción.
  • ¿Puedo actualizar registros en múltiples tablas con una sola sentencia UPDATE?
    La sintaxis estándar de UPDATE opera sobre una sola tabla. Sin embargo, algunos sistemas de bases de datos (como MySQL o SQL Server) ofrecen sintaxis extendida que permite actualizar una tabla basándose en datos de otra tabla, a menudo usando JOINs o subconsultas dentro de la cláusula SET o WHERE.
  • ¿Cómo actualizo un valor a NULL?
    Simplemente asigna NULL al nombre de la columna en la cláusula SET: SET columna = NULL.
  • ¿Puedo usar subconsultas en la cláusula SET o WHERE?
    Sí, es una práctica común y potente. Puedes usar el resultado de una subconsulta para determinar el nuevo valor de una columna o para filtrar las filas que deben ser actualizadas en la cláusula WHERE.

Conclusión

La sentencia UPDATE es una herramienta esencial para mantener la integridad y relevancia de los datos en tus bases de datos SQL. Permite modificar registros existentes de manera controlada y eficiente. Hemos visto cómo utilizarla para actualizar una o varias columnas, para filas específicas utilizando la cláusula WHERE (la cual es crucial), y también cómo actualizar todos los registros de una tabla cuando es necesario.

Recuerda siempre la importancia de la cláusula WHERE para apuntar a los registros correctos y evitar cambios masivos no deseados. La práctica y la comprensión de los ejemplos te ayudarán a dominar esta potente sentencia y a gestionar tus datos con confianza y precisión.

Si quieres conocer otros artículos parecidos a Modificar Registros en SQL: La Clave UPDATE puedes visitar la categoría Bases de datos.

Ivan

Soy un entusiasta de la tecnología con especialización en bases de datos, particularmente en MySQL. A través de mis tutoriales detallados, busco desmitificar los conceptos complejos y proporcionar soluciones prácticas a los desafíos cotidianos relacionados con la gestión de datos

Aprende mas sobre MySQL

Subir