6.2. Actualización de datos #

La modificación de datos que ya están en la base de datos se conoce como actualización. Puedes actualizar filas individuales, todas las filas de una tabla o un subconjunto de todas las filas. Cada columna se puede actualizar por separado; las demás columnas no se ven afectadas.

Para actualizar las filas existentes, utiliza el comando UPDATE. Esto requiere tres fragmentos de información:

  1. El nombre de la tabla y la columna a actualizar

  2. El nuevo valor de la columna

  3. Qué fila(s) actualizar

Recuerda de la Chapter 5 que SQL no proporciona, en general, un identificador único para las filas. Por lo tanto, no siempre es posible especificar directamente qué fila actualizar. En su lugar, especificas qué condiciones debe cumplir una fila para ser actualizada. Solo si tienes una clave primaria en la tabla (independientemente de si la declaraste o no) puedes abordar de manera confiable las filas individuales eligiendo una condición que coincida con la clave primaria. Las herramientas gráficas de acceso a bases de datos se basan en este hecho para permitirte actualizar las filas de forma de manera individual.

Por ejemplo, este comando actualiza todos los productos que tienen un precio de 5 para que tengan un precio de 10:

UPDATE products SET price = 10 WHERE price = 5;

Esto podría hacer que se actualicen cero, una o muchas filas. No es un error intentar una actualización que no coincida con ninguna fila.

Analicemos ese comando en detalle. Primero está la palabra clave UPDATE seguida del nombre de la tabla. Como es habitual, el nombre de la tabla puede estar calificado por el esquema, de lo contrario se busca en la ruta (path). A continuación está la palabra clave SET seguida del nombre de la columna, un signo de igualdad y el nuevo valor de la columna. El nuevo valor de la columna puede ser cualquier expresión escalar, no solo una constante. Por ejemplo, si deseas aumentar el precio de todos los productos en un 10%, podrías usar:

UPDATE products SET price = price * 1.10;

Como ves, la expresión para el nuevo valor puede hacer referencia a los valores existentes en la fila. También omitimos la cláusula WHERE. Si se omite, significa que se actualizan todas las filas de la tabla. Si está presente, solo se actualizan aquellas filas que cumplen con la condición WHERE. Ten en cuenta que el signo de igualdad en la cláusula SET es una asignación, mientras que el de la cláusula WHERE es una comparación, pero esto no genera ninguna ambigüedad. Por supuesto, la condición WHERE no tiene que ser una prueba de igualdad. Muchos otros operadores están disponibles (ver la Chapter 9). Pero la expresión debe evaluarse a un resultado booleano.

Puedes actualizar más de una columna en un comando UPDATE enumerando más de una asignación en la cláusula SET. Por ejemplo:

UPDATE mytable SET a = 5, b = 3, c = 1 WHERE a > 0;