• Viernes 8 de Noviembre de 2024, 09:43

Autor Tema:  Cambiar valor de un campo y sus referencias  (Leído 2358 veces)

manix

  • Miembro MUY activo
  • ***
  • Mensajes: 203
  • Nacionalidad: cr
    • Ver Perfil
    • http://apuntes.delibertad.com
Cambiar valor de un campo y sus referencias
« en: Domingo 21 de Septiembre de 2008, 23:10 »
0
hola

pues en estos dias ando peleandome con dos bases de datos, la idea fusionarlas, el problema no es la estructura de la base de datos, pues las tablas y sus campos son los mismos, lo unico que cambia en la informacion. Entonces me he dado la tarea de unir esa informacion en una sola base de datos.

el punto esta es que hay datos que se repiten.. me explico:

base de datos #1

tabla personas:

id_p = number     *aca hay una persona con el id_p = 10*
correo =varchar

tabla tareas
id_tarea = number
id_p = number
texto = varchar


base de datos #2

tabla personas:

id_p = number     *aca hay una persona con que TAMBIEN TIENE el id_p = 10*
correo =varchar

tabla tareas
id_tarea = number  
id_p = number      *esa misma persona tiene referencia aca*
texto = varchar


entonces lo que quiero es que por medio de una consulta cambiarle el id repetido a la tabla personas, pero que al mismo tiempo se le cambie en las tablas donde hace refencia ese id, pero no se como hacerlo
me explico? muchas gracias de antemano!!!

saludos

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: Cambiar valor de un campo y sus referencias
« Respuesta #1 en: Lunes 22 de Septiembre de 2008, 01:17 »
0
Lo que quieres es cambiar el id nomas? o es el mismo id  pero diferente persona? o es completamente el mismo registro?

Esto se puede hacer con una llave foranea con actualizacion en cascada
http://dev.mysql.com/doc/refman/5.0/es/ ... aints.html



La otra opcion es crear una columna Alternativa con el nuevo ID

Ejemplo:

Código: SQL
  1. ALTER TABLE personas ADD COLUMN NewID VARCHAR(10)
  2.  

Ahora tendrias que actualizar la columna NewID

Código: SQL
  1.  
  2. UPDATE personas p SET p.NewId=21 WHERE p.id_p=10 -- Segun los que vayas a modificar
  3.  


Ahora actualizas las referencias utilizando el nuevo ID

Código: SQL
  1. UPDATE tareas t,personas p SET t.id_p  = p.NewId
  2. WHERE t.id_p = p.id_p AND (p.NewId  IS NOT NULL ) AND TRIM(p.NewId )!=''
  3.  

Despues de actualizar las referencias puedes actualizar el id_p de la tabla personas

Código: SQL
  1.  
  2. UPDATE personas p SET p.id_p=p.NewId WHERE (p.NewId  IS NOT NULL ) AND TRIM(p.NewId )!=''
  3.  

Con estos pasos puedes actualizar la referencias espero se haya entendido y sea lo que estas buscando

Al fina puedes borrar la columna NewID

Código: SQL
  1. ALTER TABLE personas DROP COLUMN NewID
  2.  

* Haz un respaldo o haz una base de datos de prueba, para que te des cuenta si las cosas funionan bien

Saludos
« última modificación: Lunes 22 de Septiembre de 2008, 01:25 por F_Tanori »
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

manix

  • Miembro MUY activo
  • ***
  • Mensajes: 203
  • Nacionalidad: cr
    • Ver Perfil
    • http://apuntes.delibertad.com
Re: Cambiar valor de un campo y sus referencias
« Respuesta #2 en: Lunes 22 de Septiembre de 2008, 03:35 »
0
hola

mm que pena, dejame explicarme mejor

imagina un tabla que tiene un id, pero ese id se encuentra en muchas otras tablas, lo que quiero es que al cambiar ese id por el que yo quiera, pero al cambiar el id se pierden las refenrecias en las demas tablas que tenias referencia a ese id.. cierto?
hay alguna forma que al cambiar ese id tambien se cambie  en las demas tablas donde se hace referencia?
espero esta vez se haya entendido mejor, muchas gracias por tu respuesta y tiempo

saludos

F_Tanori

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: Cambiar valor de un campo y sus referencias
« Respuesta #3 en: Lunes 22 de Septiembre de 2008, 08:40 »
0
Ah por eso te decia como primer opcion seria crearle una llave foranea a cada una de las tablas hijas
http://dev.mysql.com/doc/refman/5.0/es/ ... aints.html


Código: Visual Basic
  1. ALTER TABLE tareas ADD CONSTRAINT FK_tareas FOREIGN KEY FK_tareas (id_p)
  2. REFERENCES persona (id_p)
  3. ON UPDATE CASCADE
  4.  

Lo importante es ON UPDATE CASCADE, para que al actualizar la tabla Padre se actualicen todas las referencias

Saludos
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

manix

  • Miembro MUY activo
  • ***
  • Mensajes: 203
  • Nacionalidad: cr
    • Ver Perfil
    • http://apuntes.delibertad.com
Re: Cambiar valor de un campo y sus referencias
« Respuesta #4 en: Martes 23 de Septiembre de 2008, 05:02 »
0
hola

que interesante estas sentencias!! sale de maravilla, imaginate lo que es cambiar una a una las decenas de tablas que hace referecia ese id en una base de datos relativamente grande...

ha salido de maravilla, muchas gracias  ;)

saludos