UPDATE es el comando DML que permite actualizar registros de base de datos. Dicho de otro modo, UPDATE permite modificar los valores de las columnas de las tablas respetando el tipo de dato correspondiente.
La sintaxis de la sentencia es sencilla:
UPDATE `nombeTabla` SET `nombreColumna` = nuevoValor WHERE condiciones
Al igual que la sentencia DELETE, es muy importante tener en cuenta la cláusula WHERE, para evitar que los cambios en la tabla se propaguen a todos los registros.
Para entender mejor el funcionamiento, vamos a realizar algunos ejemplos de UPDATE sobre la tabla Clientes y Empleados respectivamente.
Revisando los registros de la tabla Clientes, nos fijamos que algunos de ellos se insertaron con errores ortográficos que son precisos corregir:
| idClientes | nombre | apellidos | direccion | cuenta |
|---|---|---|---|---|
| 1 | Fernando | García Rodriguez | C/ Virgen del rosal 28 | 111222333 |
Al apellido Rodríguez le falta el acento:
Volvemos a ejecutar la consulta y comprobamos que el registro se ha actualizado correctamente:
| idClientes | nombre | apellidos | direccion | cuenta |
|---|---|---|---|---|
| 1 | Fernando | García Rodríguez | C/ Virgen del rosal 28 | 111222333 |
Ahora veremos otro ejemplo:
| idClientes | nombre | apellidos | direccion | cuenta |
|---|---|---|---|---|
| 2 | María | Lopez ruiz | C/ Alcalá 138 | 123456789 |
Al apellido López le falta el acento, Ruiz empieza en minúscula y la calle debería ser: ‘de Alcalá’ no ‘Alcalá’.
Volvemos a ejecutar la consulta y comprobamos que el registro se ha actualizado correctamente:
| idClientes | nombre | apellidos | direccion | cuenta |
|---|---|---|---|---|
| 2 | María | López Ruiz | C/ de Alcalá 138 | 123456789 |
nombre, porque en nuestra tabla Clientes solo hay una María. Sin embargo, queremos recalcar que esto sería una mala praxis, ya que si hubiera más de una María, el cambio afectaría a todos los registros. Es por ello primordial, filtrar siempre por campos únicos o en su defecto, acotar el registro requerido con más condiciones en la cláusula WHERE.Pasemos al siguiente ejemplo:
| idPedidos | producto | descripcionProducto | precio | fechaPedido | numeroProductos | totalPrecio | idClientes |
|---|---|---|---|---|---|---|---|
| 1 | Xiami Mi 11 | Smartphone | 286,95 | 2022-07-09 | 15 | 4304,25 | 3 |
Al producto Xiaomi le falta la O y además queremos modificar la fechaPedido al 2022-07-10:
| idPedidos | producto | descripcionProducto | precio | fechaPedido | numeroProductos | totalPrecio | idClientes |
|---|---|---|---|---|---|---|---|
| 1 | Xiaomi Mi 11 | Smartphone | 286,95 | 2022-07-10 | 15 | 4304,25 | 3 |
Para eliminar el valor de una columna, basta con hacer un UPDATE y setear a NULL o '' el campo dependiendo de las restricciones del mismo.
| idPedidos | producto | descripcionProducto | precio | fechaPedido | numeroProductos | totalPrecio | idClientes |
|---|---|---|---|---|---|---|---|
| 2 | Play Station 5 | NULL | 549,95 | 2022-07-18 | 4 | 2199,8 | 2 |
Es posible también, utilizar UPDATE en tablas cruzadas por alguna cláusula JOIN:
UPDATE C SET cuenta = 111111111
FROM Clientes C
INNER JOIN Pedidos P
ON C.idClientes = P.idClientes
WHERE P.precio > 45
AND C.idClientes = 4;
| idClientes | nombre | apellidos | direccion | cuenta |
|---|---|---|---|---|
| 4 | Luis | Sanchez García | C/ de la luz 21 | 111111111 |
En este caso, al haber en la tabla Pedidos un producto con precio mayor a 45 euros para el cliente con idClientes = 4, la cuenta del cliente se ha actualizado correctamente al nuevo valor.
También es posible recuperar el valor de una SELECT para actualizar un campo:
| idPedidos | producto | descripcionProducto | precio | fechaPedido | numeroProductos | totalPrecio | idClientes |
|---|---|---|---|---|---|---|---|
| 2 | Play Station 5 | Smartphone | 549,95 | 2022-07-18 | 4 | 2199,8 | 2 |