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

Actualizacion de llaves foraneas

Estas en el tema de Actualizacion de llaves foraneas en el foro de Mysql en Foros del Web. Hola, tengo una duda sobre mi base de datos, quisiera saber como se actualizaria la llave foranea de una tabla en base a mi tabla ...
  #1 (permalink)  
Antiguo 20/07/2012, 08:23
 
Fecha de Ingreso: julio-2012
Mensajes: 138
Antigüedad: 10 años
Puntos: 4
Actualizacion de llaves foraneas

Hola, tengo una duda sobre mi base de datos, quisiera saber como se actualizaria la llave foranea de una tabla en base a mi tabla principal, por ejemplo:

Tabla equipo:
id_equipo //Llave primaria auto incrementable
tipo_equipo
modelo


Tabla garantia
id_garantia //Llave primaria autoincrementable
id_equipo //Llave foranea
numero_garantia


Para que tenga la relacion, acaso tengo que escribir la relacion manualmente? o como se haria automaticamente.

Aun soy muy nueva en esto, gracias por su ayuda.
  #2 (permalink)  
Antiguo 20/07/2012, 08:57
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 15 años, 5 meses
Puntos: 447
Respuesta: Actualizacion de llaves foraneas

Hola Loop 29:

Al momento en que defines la llave foránea, especificas el comportamiento que se debe tener cuando hay un DELETE o un UPDATE sobre la llave Principal;

http://dev.mysql.com/doc/refman/5.0/...nstraints.html

Ahí especificas si se prohíbe (RESTRICT) la eliminación o actualización de llaves primarias o si se realiza en ambas tablas (CASCADE), es decir, si se elimina o actualiza la tabla "padre" se eliminan o actualizan los registros relacionados en la tabla "hija".

Por otro lado, tengo una gran duda, si tu campo es autoincremental ¿POR QUÉ NECESITAS ACTUALIZAR TU CAMPO LLAVE?

Saludos
Leo.
  #3 (permalink)  
Antiguo 20/07/2012, 09:05
 
Fecha de Ingreso: julio-2012
Mensajes: 138
Antigüedad: 10 años
Puntos: 4
Respuesta: Actualizacion de llaves foraneas

Ok, o sea me refiero a que si ingreso datos asi:

Tabla equipo:
id_equipo : 1
tipo_equipo: monitor
modelo: 1256s

id_equipo : 2
tipo_equipo: cpu
modelo: xyz



Tabla garantia
id_garantia: 1 //En este no hay problema de autoincremento
id_equipo: 1
numero_garantia: 123456

id_garantia: 2 //Tampoco hay problema de autoincremente
id_equipo: 2
numero_garantia: 4576


O sea algo asi, en mi restricciones de llave foranea puse update cascade y delete cascade, pero si ingreso datos en mi tabla equipo, este no se actualiza en garantia.

Perdon por no entender muy bien, y gracias por responder.
  #4 (permalink)  
Antiguo 20/07/2012, 09:37
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 14 años, 7 meses
Puntos: 2658
Respuesta: Actualizacion de llaves foraneas

¿QUé tipo de tablas usas: InnoDB MyISAM?
__________________
¿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 20/07/2012, 09:39
 
Fecha de Ingreso: julio-2012
Mensajes: 138
Antigüedad: 10 años
Puntos: 4
Respuesta: Actualizacion de llaves foraneas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
¿QUé tipo de tablas usas: InnoDB MyISAM?
Utilizo consola para crear la base de datos, SQL server 5.5
  #6 (permalink)  
Antiguo 20/07/2012, 09:41
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 15 años, 5 meses
Puntos: 447
Respuesta: Actualizacion de llaves foraneas

Hola de nuevo Loop29:

Creo que estás completamente [email protected] en temas de Base de Datos, y ese es todo el problema .

Las operaciones que se afectan con las restricciones de llave foránea SON LOS BORRADOS Y LAS ACTUALIZACIONES, pero de ninguna manera LAS INSERCIONES... estas se realizan de manera independiente. Las restricciones de llave foránea te servirían por ejemplo para asegurar que no se pueda insertar un registro en tu tabla GARANTIA que haga referencia a un equipo que no exista en la tabla de EQUIPOS... Puedes tener miles de registros en tu tabla de EQUIPOS, pero eso no implica que también tengas que insertar esos registros a tu tabla de GARANTIA.

Ahora bien, si tu relación entre tablas es 1 a 1 y es necesario que cada equipo tenga asignado una garantía, entonces el problema es con el modelo de datos... no tendrías necesidad de utilizar dos tablas, sino que debes incluir el campo numero_garantia como un atributo más de tu tabla EQUIPOS.

espero que te quede un poco más claro este tema... te recomiendo que busques cualquier libro básico sobre Bases de Datos y le des un vistazo, te evitarás muchos dolores de cabeza.

Saludos
Leo.
  #7 (permalink)  
Antiguo 20/07/2012, 09:42
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 15 años, 5 meses
Puntos: 447
Respuesta: Actualizacion de llaves foraneas

Cita:
Iniciado por Loop29 Ver Mensaje
Utilizo consola para crear la base de datos, SQL server 5.5
MUCHO OJO... ¿Estás trabajando con MySQL o con SQL Server como servidor de Base de Datos?... son dos cosas COMPLETAMENTE DIFERENTES

Creo que desde ahí tenemos problemas... lo que gnzsoloyo pregunta si trabajas con MySQL qué tipo de tablas estás utilizando:

mysql> SHOW CREATE TABLE tabla;
+-------+------------------------------------------
---------------------------------------------------
--------------------+
| Table | Create Table

|
+-------+------------------------------------------
---------------------------------------------------
--------------------+
| tabla | CREATE TABLE `tabla` (
`campo1` varchar(10) DEFAULT NULL,
`campo2` varchar(10) DEFAULT NULL,
`campo3` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+------------------------------------------
---------------------------------------------------
--------------------+
1 row in set (0.17 sec)

Saludos
Leo.

Etiquetas: llaves, tablasmysql
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 15:38.