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

Claves foraneas

Estas en el tema de Claves foraneas en el foro de Mysql en Foros del Web. Muy buenas, estoy comprando el uso de las claves foraneas y nose que hago mal. Creo dos tablas: Código: CREATE TABLE parent( id INT NOT ...
  #1 (permalink)  
Antiguo 22/10/2010, 07:04
 
Fecha de Ingreso: octubre-2010
Mensajes: 38
Antigüedad: 14 años
Puntos: 0
Claves foraneas

Muy buenas, estoy comprando el uso de las claves foraneas y nose que hago mal.

Creo dos tablas:

Código:
CREATE TABLE parent(
  id INT NOT NULL,
  PRIMARY KEY (id)
) ;

CREATE TABLE child(
  id INT, 
  parent_id INT,
  FOREIGN KEY (parent_id) 
    REFERENCES parent(id) 
ON UPDATE CASCADE
    ON DELETE CASCADE
) ;
Inserto en parent una fila con id 8.
Inserto en child una fila con id 20 y parent_id 8.

Si elimino o modifico la fila de parent, la fila de child no se ve afectada, porque?

Gracias y espero no molestar con esta novatada.
  #2 (permalink)  
Antiguo 22/10/2010, 07: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: 17 años
Puntos: 2658
Respuesta: Claves foraneas

¿Qué tipo de tablas estás usando?
Las FK sólo funcionan en MySQL si usas tablas InnoDB.
__________________
¿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 22/10/2010, 07:32
 
Fecha de Ingreso: octubre-2010
Mensajes: 38
Antigüedad: 14 años
Puntos: 0
Respuesta: Claves foraneas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
¿Qué tipo de tablas estás usando?
Las FK sólo funcionan en MySQL si usas tablas InnoDB.
Muchas gracias por la respuesta!! No sabía de eso en MySQL.

Entonces bastará con poner ENGINE=INNODB; después d ela creacion de cada tabla.
  #4 (permalink)  
Antiguo 22/10/2010, 07:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Claves foraneas

No después de la creación sino en la creación:
Código MySQL:
Ver original
  1. CREATE TABLE parent(
  2.   id INT  UNSIGED NOT NULL,
  3.   PRIMARY KEY (id)
  4.  
  5. CREATE TABLE child(
  6.   id INT UNSIGED,
  7.   parent_id INT UNSIGED,
  8.   FOREIGN KEY (parent_id)
  9.     REFERENCES parent(id)

Tip: Los ID numéricos deben ir siempre como UNSIGED, por dos razones: 1) Los auto_increment jamás generan números negativos y no existen IDs negativos en el universo. Nadie implementaría un numero no natural como identificador de un archivo ¿o sí?
2) Cuando usas números con signo, el rango de IDs disponibles se reduce a la mitad, porque la mitad del rango está asignado a los negativos. No te olvides que los números no se almacenan como cifras sino como binarios.
__________________
¿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 22/10/2010, 08:08
 
Fecha de Ingreso: octubre-2010
Mensajes: 38
Antigüedad: 14 años
Puntos: 0
Respuesta: Claves foraneas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No después de la creación sino en la creación:
Código MySQL:
Ver original
  1. CREATE TABLE parent(
  2.   id INT  UNSIGED NOT NULL,
  3.   PRIMARY KEY (id)
  4.  
  5. CREATE TABLE child(
  6.   id INT UNSIGED,
  7.   parent_id INT UNSIGED,
  8.   FOREIGN KEY (parent_id)
  9.     REFERENCES parent(id)

Tip: Los ID numéricos deben ir siempre como UNSIGED, por dos razones: 1) Los auto_increment jamás generan números negativos y no existen IDs negativos en el universo. Nadie implementaría un numero no natural como identificador de un archivo ¿o sí?
2) Cuando usas números con signo, el rango de IDs disponibles se reduce a la mitad, porque la mitad del rango está asignado a los negativos. No te olvides que los números no se almacenan como cifras sino como binarios.

Quería decir en la cración, pero justo despues de escribir la estructura de la tabla, es que lo habia visto ya por ahí.

Muchas gracias por la respuesta y por tus anotaciones.
  #6 (permalink)  
Antiguo 22/10/2010, 09:29
 
Fecha de Ingreso: octubre-2010
Mensajes: 38
Antigüedad: 14 años
Puntos: 0
Respuesta: Claves foraneas

Ya está solucionado.

Última edición por grito; 22/10/2010 a las 10:19

Etiquetas: claves, foreignkey
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 08:15.