InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
Tutorial SQL
Introducción SQL
El lenguaje SQL
Componentes del lenguaje SQL
Tablas
Indices
Vistas
Consultar datos. SELECT
Insertar datos. INSERT
Borrado de datos. DELETE
Actualización de datos. UPDATE
Consultas combinadas. JOINS
Consultas agregadas
Subconsultas
También puedes ver ...
¿Qué es el Collation en SQL ?
Como encriptar o cifrar cadenas y campos en SQL server 2005 ENCRYPTBYPASSPHRASE y DECRYPTBYPASSPHRASE
SQL Prompt - Intellisense para SQL Server
Borrado de datos. DELETE
Consultas agregadas
Introducción SQL
El lenguaje SQL
Componentes del lenguaje SQL
Tablas
Indices

Afiliados
La Web del programador
MundoProgramacion


 

Actualización de datos.

La sentencia UPDATE.

    Para la actualización de datos SQL dispone de la sentencia UPDATE. La sentencia UPDATE permite la actualización de uno o varios registros de una única tabla. La sintaxis 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 valores de la tabla tMarca obtenidos anteriormente en la página dedicada a la inserción 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 deben ser del tipo del campo.

    Un aspecto a tener en cuenta es que los campos que forman la primary key de una tabla sólo se podrán modificar si los registros no están referenciados en ninguna otra tabla. En nuestro caso sólo podremos modificar la matrícula de un coche si no tiene registros asociados en la tabla tAlquileres.

Esto puede causar poblemas, ya que podríamos habernos equivocado al dar de alta el coche en la tabla tCoches y detectar el error despues de alquilar el coche. En tal caso tendríamos dar de alta un nuevo coche con la matrícula correcta, actualizar los registros de la tabla alquileres y por último borrar el registro erroneo de la tabla tCoches. Este proceso puede ser bastante complicado en el caso de que existiran más relaciones con la tabla. Se podría considerar que la clave primaria de la tabla esta mal definida y que la matrícula no debe ser el elemento que identifique el coche. Una alternativa seria crear un código autonumérico para la tabla tCoches que realizará las veces de clave primaria y crear un índice único para la matrícula, este diseño tambien tiene sus "pegas", por lo que debemos decidir que modelo utilizar, y seleccionar las claves primarias con sumo cuidado.  


Uso de subconsultas con UPDATE

    El uso de subconsultas es una técnica avanzada de consulta que veremos con detalle más adelante, pero que tratamos aquí de forma introductoria.

    Hasta ahora hemos actualizado los datos con valores que conocemos de antemano, ¿pero qué ocurre cuando esos datos deben tomarse de otra tabla de la base de datos?.Podríamos diseñar un programa que recorriera toda la tabla y buscará el valor adecuado para cada registro y lo actualizase. Sin duda es una solución, y en ocasiones casí la única, pero es una solución cara y compleja que además exige que conozcamos algún otro lenguaje de programación. 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 sentencia UPDATE, con la salvedad de que podemos utilizar subconsultas en lugar de valores al asignar los campos. De forma generica podemos decir que las subconsultas 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, actualizando el campo marca a el valor del código de la marca en la tabla tMarcas.

    El uso de subconsultas para actualizar datos tiene algunas limitaciones:

  • La subconsulta sólo puede devover un único campo.
  • La subconsulta sólo puede devolver un sólo registro.
  • El tipo de datos devuelto por la subconsulta debe ser del mismo tipo que el campo al que estamos asignando el valor.
  • No todos los sistemas de bases de datos permiten usar subconsultas para actualizar 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 numérico y el campo marca de la tabla tCoches es texto. ¿Por qué funciona? Muy facil, el motor de la base de datos es capaz de convertir el valor numérico a un valor texto de forma automática, si bien esta es una excepción.

    Ahora que ya tenemos modificado el valor de la marca de los registros, es conveniente modificar su tipo de datos y crear una foreign key contra la tabla tMarcas. 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Í .



Inicio | Tutorial SQL Borrado de datos. DELETETutorial SQL Consultas combinadas. JOINS Versión para imprimir Foros de consulta

 
sentencia de eliminacion de lo... por Anónimo
Respuesta recibida el [30/06/2007 10:05:38]
sentencia de eliminacion de los datos

 
Error por Miguel
Respuesta recibida el [27/08/2007 07:58:45]
Esto que esta expicado aca da error en access 2003

 
Miguel por ALex
Respuesta recibida el [10/10/2007 08:13:19]
Miguel mira donde pone No todos los sistemas de bases de datos permiten usar subconsultas para actualizar datos (Access) aunque si una buena parte de ellos (ORACLE, SQL Server, Sybase ...)

 
M por Alex
Respuesta recibida el [23/10/2007 02:01:23]
Estimado Autor del artículo actualización de datos uso de la sentencia update: Refiriéndome a tu artículo, con todo respeto, deberías de poner atención en tus errores gramaticales y ortográficos, ya que son espantosos, sólo por que te dedicas a cultivar a la gente con tus conocimientos de BD, pero sí también ponte a repasar un cursillo de español, sale, cuidate, y revisa eso para que tus artículos sean una fuente de primera mano y no de tercera, ciao.

 
Para Alex por Devjoker
Respuesta recibida el [23/10/2007 03:58:59]
Cuando uno escribe cientos de artículos (en la web hay unos 300 actualmente) algunos errores ortográficos se cometen. En este artículo había uno especialmente llamativo que he corregido.
En cuanto a la gramática creo que es bastante correcta.
De cualquier modo no pretendemos un asiento en la real academia de la lengua, tan solo compartir nuestros conocimientos y experiencias.

 
Gracias por responderme, solo ... por Alex
Respuesta recibida el [26/10/2007 12:07:44]
Gracias por responderme, solo era una sugerencia para tu sitio, ya que una fuente de primera mano resulta difícil de obtener hoy en día en este mundo tan globalizado como este, y siendo una de éstas resulta recomendable para los que habemos en internet, una mejora de la calidad en cuanto a material e innovación, el objetivo que tu tienes con tu sitio, quizá no es el de enseñar a la gente a "realizar cosas" pero me he puesto a navegar en tu sitio y pues valdría la pena sacarle más provecho, ¿no crees esto?, y pues de fuentes que no sean de primera mano como un libro, una revista ó un sitio reconocido hay muchos y pues se trata de que internet tenga mejor calidad en todo, y me refiero desde una simple redacción, hasta el tema que estés tratando, y pues mi comentario lo realicé por que según el currículo que tienes en la parte de abajo se ve que es extenso y pues tu experiencia debería dejar más de que hablar ¿no crees?, bueno es mi punto de vista, cada quien!!, saludos y qué bueno que corrijas los percances, por que no sólo en la ortografía, también en tus ejemplos, yo por lo pronto soy un buen DBA en un centro de investigación en mi país, cuídate, ciao.

 
Y ... por Yamil
Respuesta recibida el [09/11/2007 12:22:21]
Y ... ?

 
dejenlo en paz por deysi
Respuesta recibida el [13/11/2007 09:58:32]
la verdad a mi toda tu informacion me a sido muy util y es responsabilidad de cada quien ver lo que vas ha utilizar y no todas las personas se dan el tiempo de ayudar a otros .

es es lo que opino cuidense¡¡

 
gracias por jozeunico
Respuesta recibida el [16/01/2008 11:56:07]
Pues me ha sido de gran utilidad,aunque tal vez podrias extender o hacer la explicacion ejemplo a ejemplo y proporcionar las tablas para correr los queries, en lo personal lo entendi (bueno la parte que necesitaba) sin muchos problemas, muchas gracias.

 
Los criticones molestan por Cristobal
Respuesta recibida el [20/02/2008 12:32:40]
Estimado autor:

Tu artículo me ha sido muy útil.
Me molesta que haya gente que, en vez de hacer sugerencias constructivas y/o agradecerte por tu desinteresada labor, se ponga a criticar.

 
no hagamos de esto un foro de criticas por Roro
Respuesta recibida el [14/03/2008 05:55:21]
En realidad lainformacion que sale es bastante util para aquellas personas que quieren aprender o estan con alguna dificultad referente a algo y la idea de esto es construir y no destruir...apliquemos buenas vibras y no nos pongamos capciosos (no se si esta bien escrito, que me ayude el personaje de la real academia)...Saludos y gracias por la ayuda.aaaaaadiosss

 
En todo caso... por Jorge
Respuesta recibida el [18/03/2008 09:41:19]
Estoy de acuerdo con el comentario anterior, ya que esta web me ha sido de gran ayudado y me ha sacado de aprietos durante todo el tiempo que me encuentro programando... y para finalizar, felicito a las personajes que crearon esta pag. y gracias por el articulo.-
saludos y adiós
bytes

PS: sigan así

 
bien por oscar
Respuesta recibida el [19/03/2008 04:00:40]
sigue adelante con tus articulos, muy buenos

 
excelnte por alberto
Respuesta recibida el [26/03/2008 07:17:21]
sin palabras excelente

 
Muchas gracias por Alex
Respuesta recibida el [03/04/2008 09:02:56]
Muchas gracias por estos artículos. Me son muy interesantes y no me gustaria que se perdiese esta página. Lo de los errores gramaticales... pues bueno, todos nos equivocamos.
Gracias.

 
muchas gracias por tu pagina por daniel
Respuesta recibida el [16/04/2008 07:32:30]
disculpa que es string sql, como se consulta a la base de datos y que es caja de texto

 
se puede acumular en un UPDATE? por ale
Respuesta recibida el [22/04/2008 12:59:33]
se puede acumular?

por ejemplo

UPDATE tCoches
SET total = total + 20
WHERE marca = 'FORD';


gracias!

 
Felicidades por tus articulos por Miguel
Respuesta recibida el [09/05/2008 10:43:15]
De verdad que me ha sido de ayuda estos ejemplos que dejas en tu web, el compañero que critica, pues dice ser DBA, DATA BASE ADMINISTRATION, bueno no lo creo, ya que se dedico fue a buscar errores ortograficos y gramaticales, cuando su tarea no es esa, sino verificar, sugerir u opinar sobre el tema que se esta hablando, o me disculpo si soy grosero, le dio envidia, pues vio tu codigo tan perfecto, y no le quedo de otra que criticar la ortografia!!!

Bueno Saludos y sigue asi!

 
Felicidades Bueno el articulo por Marko
Respuesta recibida el [29/05/2008 11:20:13]
muy buena la pagina es aprueba de..  como se dice en mi pais .excelente material

 
Sigue adelante... por Hernan
Respuesta recibida el [04/06/2008 11:14:40]
Sigue adelante Pedro! 
Esta muy bueno tu artículo que en verdad me fue mucha utilidad. Lo hice en DB2/400 y funcionó perfecto. Y quien es Alex???? ignoralo. El mundo avanza porque hay personas como tu que comparten lo que saben sin mucho aspaviento, inclusive pones tu foto porque estas en equilibrio. No como otros que se fijan en las formas y no ven el fondo. Saludos desde Peru!

 
Alex por Roberto
Respuesta recibida el [09/06/2008 05:58:19]
Alex, ves a la paja en el ojo ajeno y no la viga en el ojo tuyo.
En tu enunciado, 'por que', debiera de ir junto ¿no? y las comas ayudan mejor a leer una frase, mas que una falta de HORTOGRAFIA. toma geroma..

---
Update (SELECT S.*, T.tipo TS From S, T WHERE S.Tipo_S = T.CodTipSus and S.Anyo = T.Anyo) Set Fecha = to_date ('09/06/2008', 'dd/mm/yyyy') Where Estado=3 and Fecha is null And TS in (1,3)


Esta sql que envio hace referencia a como incluir un FROM en un SELECT de oracle, lo cual no se puede, salvo de esta manera o creando una vista con los from y hacer el update sobre la vista.

Por cierto, ejecutado en SQL PLUS funciona, pero desde VB6, no.
Haciendo el update de una vista sí que funciona, así que así lo dejaré.
Salu2 y gracias a todos 'sin crispación'.

 
eres una persona y yo soy otra... por Anónimo
Respuesta recibida el [25/08/2008 01:21:03]
eres una persona y yo soy otra mejor que tu

 
GHFGH por HGFH
Respuesta recibida el [04/09/2008 12:21:55]
HHGFHFG

 
ayuda por Thot
Respuesta recibida el [17/09/2008 11:29:34]
mmm alguien excepto Alex el sabiondo o ediondo
me pueden decir los secretos del windows vista hhii
y sobre redes
athoted@hot...
gracias
y si scritura sta mal disculpen la falta de practica hihi

 
Al Autor por Thot
Respuesta recibida el [17/09/2008 11:33:29]
tengo acceso a una pagina qure recien se va a publicar si quieres me gustaria publicar ai tus manuales
con un sub dominio ke dices


Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



Inicio | Tutorial SQL Borrado de datos. DELETETutorial SQL Consultas combinadas. JOINS Versión para imprimir

Actualización de datos. UPDATE
Autor: Pedro Herrarte Sánchez
Visitas: 104050 Fecha de publicación: 22/10/2005
Pedro Herrarte, es consultor independiente, ofreciendo sercivios de consultoría, análisis, desarrollo y formación.

Posee mas de diez años de experiencia trabajando para las principales empresas de España.

Es especialista en tecnologías .NET, entornos Web, bases de datos (SQL Server y ORACLE) e integración de sistemas.

Es experto en desarrollo (C#, ASP.NET, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE).

Es fundador, diseñador y programador de www.devjoker.com.




Visitas: 308 | Comentarios: 0 | Archivo: Articulos
Categorias: Visual Basic .NET|C#|ASP.NET|ASP.NET|Programación|ADO.NET
27/09/2008 Navegando ....
Visitas: 85 | Comentarios: 0 | Archivo: Articulos
Categorias: Humor
Visitas: 206 | Comentarios: 0 | Archivo: Articulos
Categorias: Visual Basic .NET|C#|ASP.NET|ASP.NET|Programación|WCF
Visitas: 935 | Comentarios: 0 | Archivo: Articulos
Categorias: C#
Visitas: 208 | Comentarios: 0 | Archivo: Articulos
Categorias: JavaScript|ASP.NET
Visitas: 675 | Comentarios: 0 | Archivo: Articulos
Categorias: Windows XP|Linux|Windows Vista
Visitas: 455 | Comentarios: 0 | Archivo: Articulos
Categorias: Linux|BSD
Visitas: 235 | Comentarios: 0 | Archivo: Articulos
Categorias: Programación|Actualidad
18/08/2008 SQL Server 2008
Visitas: 1135 | Comentarios: 1 | Archivo: Articulos
Categorias: Transact-SQL
Visitas: 789 | Comentarios: 0 | Archivo: Articulos
Categorias: C#|ADO.NET|LinQ

Útimos temas recibidos en los foros ...
ayuda por yo ... [C#] 2 09/10/2008
hacer el nombre de una tabla variable por leicolei ... [SQL Server] 1 10/10/2008
Mostar nombre en una sesion de usuario por jhors ... [ASP.NET] 1 10/10/2008
Analista por Rolando ... [SQL Server] 0 10/10/2008
SQL dinámico en TRIGGERS por Alastor ... [ORACLE] 2 03/10/2008
Crystal Reports 8.5 por selvinalberto ... [Visual Basic 6.0] 0 10/10/2008
Agregar Columnas a un datagridview por Tony ... [Visual Basic .NET] 3 20/11/2007
Problema cargando un pl/sql Embebido en Pro*C por ejrivas ... [ORACLE] 0 10/10/2008
Verificar conexion a internet por giraldo ... [Visual Basic .NET] 3 11/12/2006
Como pasar un array de textboxes como parámetro a un Sub por Silvana ... [Visual Basic 6.0] 1 09/10/2008
Crear documento de Word desde Java. por Roberto ... [Java] 1 24/11/2007
necesito mi autogenerado por regulo ... [Visual Basic .NET] 0 09/10/2008

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
30/12/2007 Novedades en C# 3.0 - Primeros pasos con LINQ
22/10/2005 Consultar datos. SELECT    forma parte de...Tutorial SQL
22/10/2005 Consultas combinadas. JOINS    forma parte de...Tutorial SQL
19/08/2006 Vitualización. Maquinas Virtuales.
28/08/2006 Ubuntu en VmWare con VMware Tools
01/08/2006 Generar un fichero Excel con C# sin tener Excel instalado
21/02/2006 Introducción a .NET
03/10/2006 Definición de clases    forma parte de...Tutorial C#
22/10/2005 Introducción SQL    forma parte de...Tutorial SQL
03/10/2006 Operadores    forma parte de...Tutorial C#

 

Encuesta
¿A que perfil te adaptas mejor?
[Ver] [Votar]