Bases de Datos => MySQL => Mensaje iniciado por: manix en Domingo 21 de Septiembre de 2008, 23:10
Título: Cambiar valor de un campo y sus referencias
Publicado por: manix en Domingo 21 de Septiembre de 2008, 23:10
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
Título: Re: Cambiar valor de un campo y sus referencias
Publicado por: F_Tanori en Lunes 22 de Septiembre de 2008, 01:17
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 (http://dev.mysql.com/doc/refman/5.0/es/innodb-foreign-key-constraints.html" onclick="window.open(this.href);return false;)
La otra opcion es crear una columna Alternativa con el nuevo ID
Ejemplo:
Código: SQL
ALTERTABLE personas ADDCOLUMN NewID VARCHAR(10)
Ahora tendrias que actualizar la columna NewID
Código: SQL
UPDATE personas p SET p.NewId=21WHERE 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.NewId
WHERE t.id_p = p.id_p AND(p.NewId ISNOTNULL)ANDTRIM(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 ISNOTNULL)ANDTRIM(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
ALTERTABLE personas DROPCOLUMN NewID
* Haz un respaldo o haz una base de datos de prueba, para que te des cuenta si las cosas funionan bien
Saludos
Título: Re: Cambiar valor de un campo y sus referencias
Publicado por: manix en Lunes 22 de Septiembre de 2008, 03:35
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
Título: Re: Cambiar valor de un campo y sus referencias
Publicado por: F_Tanori en Lunes 22 de Septiembre de 2008, 08:40
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 (http://dev.mysql.com/doc/refman/5.0/es/innodb-foreign-key-constraints.html" onclick="window.open(this.href);return false;)
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
Título: Re: Cambiar valor de un campo y sus referencias
Publicado por: manix en Martes 23 de Septiembre de 2008, 05:02
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...