Bases de Datos > MySQL

 Cambiar valor de un campo y sus referencias

(1/1)

manix:
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:
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 ---ALTER TABLE personas ADD COLUMN NewID VARCHAR(10) 
Ahora tendrias que actualizar la columna NewID


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

Ahora actualizas las referencias utilizando el nuevo ID


--- Código: SQL ---UPDATE tareas t,personas p SET t.id_p  = p.NewIdWHERE t.id_p = p.id_p AND (p.NewId  IS NOT NULL ) AND TRIM(p.NewId )!=''  
Despues de actualizar las referencias puedes actualizar el id_p de la tabla personas


--- Código: SQL --- UPDATE personas p SET p.id_p=p.NewId WHERE (p.NewId  IS NOT NULL ) AND TRIM(p.NewId )!='' 
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 ---ALTER TABLE personas DROP COLUMN NewID 
* Haz un respaldo o haz una base de datos de prueba, para que te des cuenta si las cosas funionan bien

Saludos

manix:
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:
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 ---ALTER TABLE tareas ADD CONSTRAINT FK_tareas FOREIGN KEY FK_tareas (id_p)REFERENCES persona (id_p)ON UPDATE CASCADE 
Lo importante es ON UPDATE CASCADE, para que al actualizar la tabla Padre se actualicen todas las referencias

Saludos

manix:
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

Navegación

[0] Índice de Mensajes

Ir a la versión completa