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

Creacion de tablas en MySQL

Estas en el tema de Creacion de tablas en MySQL en el foro de Mysql en Foros del Web. Hola ,tengo dos dudas para crear tablas en Mysql: 1ª Como puedo hacer para que cuando se borre de una tabla "padre" un campo, en ...
  #1 (permalink)  
Antiguo 20/11/2008, 12:20
JR88
Invitado
 
Mensajes: n/a
Puntos:
Creacion de tablas en MySQL

Hola ,tengo dos dudas para crear tablas en Mysql:


1ª Como puedo hacer para que cuando se borre de una tabla "padre" un campo, en la tabla "hijo" se ponga a null el campo asociado a la tabla padre automaticamente.


2ª Tengo 2 tablas una llamada Pintores y otra Escuela,a una escuela pueden pertenecer varios pintores por lo que la llave principal de Escuela pasaria a Pintores,y lo que quiero saber es como puedo hacer para que cuando actualice una llave de una escuela se actualice automaticamente en la tabla pintores esa escuela.
  #2 (permalink)  
Antiguo 20/11/2008, 16:18
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Respuesta: Creacion de tablas en MySQL

Cita:
1ª Como puedo hacer para que cuando se borre de una tabla "padre" un campo, en la tabla "hijo" se ponga a null el campo asociado a la tabla padre automaticamente.
Me imagino que decir que sea NULL estas queriendo que se elimine, por que si solo pones NULL a la clave foránea estarás rompiendo la consistencia de los datos.

Cita:
2ª Tengo 2 tablas una llamada Pintores y otra Escuela,a una escuela pueden pertenecer varios pintores por lo que la llave principal de Escuela pasaria a Pintores,y lo que quiero saber es como puedo hacer para que cuando actualice una llave de una escuela se actualice automaticamente en la tabla pintores esa escuela.
Si estas usando las tablas tipo MyIsam puedes emular ese comportamiento con programación, pero si estas usando tablas del tipo InnoDB, solo tienes que establecer a tus relaciones la propiedad "cascade on delete", con eso si eliminas un registro padre todos los dependientes también serán eliminados.

Saludos!
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #3 (permalink)  
Antiguo 20/11/2008, 16:32
JR88
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Creacion de tablas en MySQL

Gracias, pero en la primera me refiero a que si tengo por ejemplo la tabla "Escuela" con los campos Nombre_Escuela,FechaAparicion y la tabla "Pintor" con los campos Cod,Nombre,Edad, Nombre_Escuela cuando borre un nombre de escuela en la tabla escuela en la tabla Pintor en el campo Nombre_Escuela aparezca Null.
  #4 (permalink)  
Antiguo 20/11/2008, 17:57
Avatar de Vincent_Vallentine  
Fecha de Ingreso: diciembre-2005
Mensajes: 40
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: Creacion de tablas en MySQL

Mira, hazlo con 2 consultas. Primero haz un update de los pintores que tienen de escuela la que pretendes eliminar y los pones a null, y luego haces el delete de la escuela. Y ya lo tienes :)
  #5 (permalink)  
Antiguo 20/11/2008, 18:35
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: Creacion de tablas en MySQL

Cita:
cuando borre un nombre de escuela en la tabla escuela en la tabla Pintor en el campo Nombre_Escuela aparezca Null.
Es precisamente eso lo que quiere decir Genetix con "por que si solo pones NULL a la clave foránea estarás rompiendo la consistencia de los datos"
Precisamente una de las restricciones del modelo relacional es que una clave foránea NUNCA puede ser NULL, porque para ello el valor NULL debería existir en la tabla origen (la que estás llamando "padre"), y como en esa tabla el campo es PK, jamás puede ser NULL.
Si la pones a NULL simplemente no te dejará, o bien tienes que manejar la relación sin usar FK, o sin usar tablas relacionales y administrarlo por código, como es lo que en realidad está porponiendo Vincent_Vallentine, sin darse cuenta que eso sólo se puede hacer con tablas 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)
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 01:09.