Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Crear relaciones con tablas con datos

Estas en el tema de Crear relaciones con tablas con datos en el foro de Mysql en Foros del Web. Tengo una tabla TABLA PRINCIPAL codigo nombre estado importe con los siguente datos: codigo/nombre/estado/importe 100/Pablo/1/120.30 120/Julio/2/150.40 210/Cesar/3/200.00 250/Miguel/1/180.75 180/Yeny/3/300.50 Y aparte tengo la tabla ESTADO ...
  #1 (permalink)  
Antiguo 26/10/2014, 16:26
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Pregunta Crear relaciones con tablas con datos

Tengo una tabla
TABLA PRINCIPAL
codigo
nombre
estado
importe
con los siguente datos:
codigo/nombre/estado/importe
100/Pablo/1/120.30
120/Julio/2/150.40
210/Cesar/3/200.00
250/Miguel/1/180.75
180/Yeny/3/300.50

Y aparte tengo la tabla ESTADO
idestado/estado
1/Activo
2/Inactivo
3/Revisión

Si ya tengo las tablas creadas en mysql, cómo puedo crear las relaciones sin perder la data?
Gracias.
__________________
Todos somos iguales. NO! a la violencia de género.

Última edición por bandolera; 26/10/2014 a las 16:32
  #2 (permalink)  
Antiguo 26/10/2014, 16:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Crear relaciones con tablas con datos

Voy a suponer que lo que quieres es saber cómo se crea una FK desde la tabla "principal", a la tabla de "estados". Pueso es simplemente con un ALTER TABLE que genere la restricción, con lo cual no deberías tener ningún problema.
El método lo puedes consultar en el manual de referencia: 13.1.14.2 Using FOREIGN KEY Constraints
Por supuesto que para poder crear este tipo de restricicones se deben cumplir algunas condiciones:
1) Deben ser tablas InnoDB. Las MyISAM no tienen FK.
2) Si los campos son numéricos ambos (FK y PK referida) deben ser del mismo tipo de columna e igual rango.
3) Si los campos son de cadenas de caracteres, deben ser del mismo tipo, rango, charset y collation.
4) Si hay datos presentes en la tabla dependiente (la que lleva la FK) estos datos deben cumplir con la dependencia, incluso antes de ser creada la FK, ya que MySQL comprbará la validez de los datos antes de crear la restriccion.

¿Se entiende el tema?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 27/10/2014, 09:12
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Respuesta: Crear relaciones con tablas con datos

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Voy a suponer que lo que quieres es saber cómo se crea una FK desde la tabla "principal", a la tabla de "estados". Pueso es simplemente con un ALTER TABLE que genere la restricción, con lo cual no deberías tener ningún problema.
El método lo puedes consultar en el manual de referencia: 13.1.14.2 Using FOREIGN KEY Constraints
Por supuesto que para poder crear este tipo de restricicones se deben cumplir algunas condiciones:
1) Deben ser tablas InnoDB. Las MyISAM no tienen FK.
2) Si los campos son numéricos ambos (FK y PK referida) deben ser del mismo tipo de columna e igual rango.
3) Si los campos son de cadenas de caracteres, deben ser del mismo tipo, rango, charset y collation.
4) Si hay datos presentes en la tabla dependiente (la que lleva la FK) estos datos deben cumplir con la dependencia, incluso antes de ser creada la FK, ya que MySQL comprbará la validez de los datos antes de crear la restriccion.

¿Se entiende el tema?
Gracias.
Yo tengo las tablas con datos, pero sin ninguna relación y quiero crearles la relación, las FK. Pero cuando hice una prueba me salió error y se borraron mis campos de una tabla principal.
Por eso era mi consulta.
Pensé que podría hacerlo por MysqlWorkbench.
__________________
Todos somos iguales. NO! a la violencia de género.
  #4 (permalink)  
Antiguo 27/10/2014, 09:32
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Crear relaciones con tablas con datos

Cita:
Pero cuando hice una prueba me salió error y se borraron mis campos de una tabla principal.
Ok. Pero ¿qué error salió?

En principio, si falla la creación de una FK eso no puede afectar de ninguna forma los datos existentes en la tabla. La generación de una FK o se ejecuta correctamente, o da un error y no se crea, pero jamás afecta los datos que ya existan.
Si tu tbla se borró, no puede haber sido por esa creación...

¿Cómo fue exactamente la query o queries que usaste en esa ocasión?

Por otro lado MySQL Workbench solament crea la sentencia necesaria, y se peude utilizar para ejecutarla, pero el resultado es el mismo que hacerlo a mano.
En ese sentido no habr´ña diferencia.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 27/10/2014, 13:48
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Pregunta Respuesta: Crear relaciones con tablas con datos

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Ok. Pero ¿qué error salió?

En principio, si falla la creación de una FK eso no puede afectar de ninguna forma los datos existentes en la tabla. La generación de una FK o se ejecuta correctamente, o da un error y no se crea, pero jamás afecta los datos que ya existan.
Si tu tbla se borró, no puede haber sido por esa creación...

¿Cómo fue exactamente la query o queries que usaste en esa ocasión?

Por otro lado MySQL Workbench solament crea la sentencia necesaria, y se peude utilizar para ejecutarla, pero el resultado es el mismo que hacerlo a mano.
En ese sentido no habr´ña diferencia.
Gracias. Creo que yo estaba usando mal el MySQL Workbench.
Tengo una consulta más relacionada con lo mismo:
Si tengo la misma tabla:
codigo/nombre/estado/importe
100/Pablo/1/120.30
120/Julio/2/150.40
210/Cesar/3/200.00
250/Miguel/1/180.75
180/Yeny/3/300.50

Y tengo otra que es de cartas:
codigo/fecha/nro_carta/contenido
120/"14/10/2014"/10/Contenido1
250/"12/10/2014"/11/Contenido2
120/"20/10/2014"/12/Contenido3

Cómo asigno mis llaves a la tabla de cartas?
__________________
Todos somos iguales. NO! a la violencia de género.

Última edición por bandolera; 27/10/2014 a las 13:54
  #6 (permalink)  
Antiguo 27/10/2014, 14:12
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Crear relaciones con tablas con datos

Cita:
Cómo asigno mis llaves a la tabla de cartas?
Sigue siendo la misma lógica: Es un ALTER TABLE que crea una FK. No veo tu problema si no puedo ver la query que intentas ejecutar.

Postea por favor el código SQL que usas para intentarlo, o bien el creado por MySQL Workbench.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 31/10/2014, 15:56
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Pregunta Respuesta: Crear relaciones con tablas con datos

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Sigue siendo la misma lógica: Es un ALTER TABLE que crea una FK. No veo tu problema si no puedo ver la query que intentas ejecutar.

Postea por favor el código SQL que usas para intentarlo, o bien el creado por MySQL Workbench.
Disculpa estaba revisando mis archivos. Creo que ya lo solucioné.
Solo tengo algunas consultas pequeñas:

Consulta 1:
=======
Si creo mi tabla y quiero generar manualmente su PK. Es así?
Código MySQL:
Ver original
  1. ALTER TABLE Tabla1
  2. ADD PRIMARY KEY (codigo)

Y si la tabla necesita dos PK como por ejemplo una tabla de cuenta corriente:
Código MySQL:
Ver original
  1. ALTER TABLE Cuenta_Corriente
  2. ADD CONSTRAINT pk_clavedoble PRIMARY KEY (codigo, fecha_mov)
Es correcto?

Consulta 2:
=======
Al crear las llaves foráneas en MySQl Workbench aparece un campo Foreing Key Options:
On UPdate:
ON Delete:
En qué casos se usa? o qué debo usar.
Gracias.
__________________
Todos somos iguales. NO! a la violencia de género.

Última edición por gnzsoloyo; 31/10/2014 a las 16:04
  #8 (permalink)  
Antiguo 31/10/2014, 16:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Crear relaciones con tablas con datos

Cita:
En qué casos se usa? o qué debo usar.
Es para generar un borrado o actualización en cascada, si la PK de la tabla referida se borra o actualiza.
El uso depende de la necesidad que se quiera cubrir. No hay una regla fija.
Si quieres que al borrar un registro de Tabla1, se borren todos los relacionados con ese registro de CuentaCorriente, es ON DELETE CASCADE.
En realidad rara vez se usan, salvo por razones muy específicas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: relaciones, sql, tabla, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:56.