Академический Документы
Профессиональный Документы
Культура Документы
La sentenci a UPDATE permite la actualizacin de uno o varios registros de una nica tabla. La s intaxis de la sentencia UPDATE es la siguiente UPDATE <nombre_tabla> SET <campo1> = <valor1> {[,<campo2> = <valor2>,...,<campoN> = <valorN>]} [ WHERE <condicion>]; Las siguientes sentencias actualizan los datos de la tabla tCoches con los v alores de la tabla tMarca obtenidos anteriormente en la pgina dedicada a la inser cin de datos. UPDATE tCoches SET marca = '1' WHERE marca = 'FORD'; UPDATE tCoches SET marca = '2' WHERE marca = 'RENAULT'; UPDATE tCoches SET marca = '3' WHERE marca = 'SEAT'; Notese que los valores para el campo marca aparecen entrecomillados, ya que es un campo de tipo varchar. Los valores con los que actualicemos los datos debe n ser del tipo del campo. Un aspecto una tabla slo otra tabla. En iene registros a tener en cuenta es que los campos que forman la primary key de se podrn modificar si los registros no estn referenciados en ninguna nuestro caso slo podremos modificar la matrcula de un coche si no t asociados en la tabla tAlquileres.
Esto puede causar poblemas, ya que podramos habernos equivocado al dar de alta el coche en la tabla tCoches y detectar el error despues de alquilar el coche. En tal caso tendramos dar de alta un nuevo coche con la matrcula correcta, actualizar los registros de la tabla alquileres y por ltimo borrar el registro erroneo de l a tabla tCoches. Este proceso puede ser bastante complicado en el caso de que ex istiran ms relaciones con la tabla. Se podra considerar que la clave primaria de l a tabla esta mal definida y que la matrcula no debe ser el elemento que identifiq ue el coche. Una alternativa seria crear un cdigo autonumrico para la tabla tCoche s que realizar las veces de clave primaria y crear un ndice nico para la matrcula, e ste diseo tambien tiene sus "pegas", por lo que debemos decidir que modelo utiliz ar, y seleccionar las claves primarias con sumo cuidado. [arriba] Uso de subconsultas con UPDATE El uso de subconsultas es una tcnica avanzada de consulta que veremos con det alle ms adelante, pero que tratamos aqu de forma introductoria. Hasta ahora hemos actualizado los datos con valores que conocemos de anteman o, pero qu ocurre cuando esos datos deben tomarse de otra tabla de la base de dato s?.Podramos disear un programa que recorriera toda la tabla y buscar el valor adecu ado para cada registro y lo actualizase. Sin duda es una solucin, y en ocasiones
cas la nica, pero es una solucin cara y compleja que adems exige que conozcamos algn otro lenguaje de programacin. Para estos casos podemos utilizar subconsultas con la sentencia UPDATE. La sintaxis es la siguiente: UPDATE <nombre_tabla> SET <campo1> = <valor1> | <subconsulta1> {[,<campo2> = <valor2> | <subconsulta2> ,... , <campoN> = <valorN> | <subconsultaN>]} [ WHERE <condicion>]; Como puede verse la sintaxis es practicamente igual a la sintaxis del la sent encia UPDATE, con la salvedad de que podemos utilizar subconsultas en lugar de v alores al asignar los campos. De forma generica podemos decir que las subconsult as son consultas SELECT incluidas dentro de otra sentencia SQL. Las siguientes sentencias UPDATE son equivalentes: Utilizando sentencias UPDATE normales: UPDATE tCoches SET marca = '1' WHERE marca = 'FORD'; UPDATE tCoches SET marca = '2' WHERE marca = 'RENAULT'; UPDATE tCoches SET marca = '3' WHERE marca = 'SEAT'; Utilizando sentencias UPDATE combinadas con subconsultas: UPDATE tCoches SET marca = (SELECT CODIGO FROM tMarcas WHERE tMarcas.Marca = tCoches.Marca ) WHERE marca IN ('FORD','RENAULT','SEAT'); Por cada registro de la tabla tCoches se ejecutar la subconsulta, actualizand o el campo marca a el valor del cdigo de la marca en la tabla tMarcas. El uso de subconsultas para actualizar datos tiene algunas limitaciones: La subconsulta slo puede devover un nico campo. La subconsulta slo puede devolver un slo registro. El tipo de datos devuelto por la subconsulta debe ser del mismo tipo que el camp o al que estamos asignando el valor. No todos los sistemas de bases de datos permiten usar subconsultas para actualiz ar datos (Access) aunque si una buena parte de ellos (ORACLE, SQL Server, Sybase ...) Pero en nuestro ejemplo el campo codigo de la tabla tMarcas es numrico y el c ampo marca de la tabla tCoches es texto. Por qu funciona? Muy facil, el motor de l a base de datos es capaz de convertir el valor numrico a un valor texto de forma automtica, si bien esta es una excepcin. Ahora que ya tenemos modificado el valor de la marca de los registros, es co nveniente modificar su tipo de datos y crear una foreign key contra la tabla tMa rcas. Para ello ejecutaremos las siguientes sentencias. ALTER TABLE tCoches alter column marca int not null;
La opcion alter column es propia de SQL Server. Para modificar el tipo de datos de una tabla debemos consultar la ayuda del gestor de bases de datos. ALTER TABLE tCoches add constraint FK_Coches_Marcas foreign key (marca) references tMarcas (codigo); Si no recuerda como modificar tablas o crear foreing key pulse AQU .