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

Error al crear tabla con Llave Foranea

Estas en el tema de Error al crear tabla con Llave Foranea en el foro de Mysql en Foros del Web. Hola: Saben porque no me deja crear un tabla con una llave foranea? create table desc_prod ( id_desc_prod int auto_increment, id_producto int not null, tiempo_ofeta ...
  #1 (permalink)  
Antiguo 22/03/2007, 13:11
 
Fecha de Ingreso: marzo-2007
Mensajes: 163
Antigüedad: 17 años, 1 mes
Puntos: 0
Pregunta Error al crear tabla con Llave Foranea

Hola:
Saben porque no me deja crear un tabla con una llave foranea?

create table desc_prod
(
id_desc_prod int auto_increment,
id_producto int not null,
tiempo_ofeta float,
primary key(id_desc_prod),
FOREIGN KEY(id_prod) REFERENCES producto(id_producto) ON UPDATE CASCADE
);

El error que me sale es: ERROR 1005(HY000): Can´t create table '.\tienda\desc_prodc.frm' (errno:150)

Por lo pronto la e creado sin llave foranea pero necesito esa llave foranea, espero puedan ayudarme. Gracias !!!!!!!!!!
  #2 (permalink)  
Antiguo 22/03/2007, 15:40
 
Fecha de Ingreso: enero-2004
Mensajes: 63
Antigüedad: 20 años, 3 meses
Puntos: 0
Re: Error al crear tabla con Llave Foranea

¿Es para mysql? Prueba a crear la clave después de crear la tabla:

Código PHP:
ALTER TABLE desc_prod
ADD CONSTRAINT id_producto_fk FOREIGN KEY 
(id_productoREFERENCES producto (id_prodON UPDATE CASCADE 
Asegúrate de que los nombres de los IDs que vas a relacionar y mencionas en la sentencia sean correctos (en tu código creo que los nombrabas mal). A mi personalmente me gusta darles el mismo nombre a aquellos campos de ID de diferentes tablas que voy a relacionar para evitar problemas y además ser más sencillo o cómodo "a la vista".

Asegúrate también de que ambos campos son del mismo tipo. No te dejará crear una FK entre un campo int y un smallint por ejemplo.

Mira a ver si tienes los dos campos que quieres relacionar como NOT NULL.

Si la relación la haces después de crear la tabla y tienes algún registro metido, comprueba que los valores de los campos que vas a relacionar cumplan con esa relación.

De momento eso sería creo lo más básico a mirar y también el motivo de la mayoría de errores en estos casos.

Un saludo
  #3 (permalink)  
Antiguo 23/03/2007, 11:35
 
Fecha de Ingreso: marzo-2007
Mensajes: 163
Antigüedad: 17 años, 1 mes
Puntos: 0
Pregunta Re: Error al crear tabla con Llave Foranea

Hola:
Muchas gracias por tu ayuda, tuve que borrar los registros porque sino me marcaba un error pero es solo una prueba asi que no me preocupé por eso.

Solo una pregunta que significa CONSTRAINT ??
  #4 (permalink)  
Antiguo 23/03/2007, 13:23
 
Fecha de Ingreso: enero-2004
Mensajes: 63
Antigüedad: 20 años, 3 meses
Puntos: 0
Re: Error al crear tabla con Llave Foranea

Con constraint le das un nombre a la clave que estás creando. En el caso del código de antes sería "id_producto_fk". Lo único en estos casos es que se debe tener cuidado ya que debe ser un identificador único para toda la BD (vamos, que hay que tener cuidado de no repetirlo). Pero puedes también omitir el constraint {identificador} y la propia BD le asigna un nombre.

Un saludo

P.D.: te iba a poner uno enlace con más información pero no me deja el sistema. No entiendo por qué no se permite poner enlaces si tienes menos de 30 posts escritos. En un foro como este, es importante dar referencias a otros sitios con documentación (no estoy hablando de hacerse autopromoción).
  #5 (permalink)  
Antiguo 19/08/2008, 06:57
 
Fecha de Ingreso: agosto-2008
Mensajes: 1
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Error al crear tabla con Llave Foranea

hola,

bueno mi problema es parecido a los anteriores, ya que he intentado crear dos tablas donde una de ellas lleva una clave foranea de la otra i me da el error siguente:

Can't create table '.\dbs\producte.frm' (errno 150)

Las tablas que he intentado crear son las siguentes:

CREATE TABLE IF NOT EXISTS famila (
fam_codi INT NOT NULL,
fam_nom VARCHAR(100),
PRIMARY KEY (fam_codi),
) ENGINE=INNODB;

CREATE TABLE IF NOT EXISTS producte (
prod_codi INT NOT NULL,
prod_codiprov VARCHAR(30),
prod_codifab VARCHAR(35),
prod_desc VARCHAR(50),
prod_prov_dispo INT,
prod_dispo INT,
prod_prov_arrib INT,
prod_arrib INT,
prod_prov_datarrib DATE,
prod_datarrib DATE,
prod_titol VARCHAR(35),
prod_prov_status CHAR(1),
prod_status CHAR(1),
prod_prov_alta DATE,
prod_alta DATE,
prod_canon DECIMAL,
prod_pvp DECIMAL,
prod_dealer DECIMAL,
prod_ocasio CHAR(1),
fam_codi INT NOT NULL,
PRIMARY KEY (prod_codi),
INDEX (fam_codi),
FOREIGN KEY (fam_codi) REFERENCES familia(fam_codi)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=INNODB;

Les agadeceria si me pudieran ayudar ya que despues de leer muchos foros i post no he encontrado la solución.

muchas grácias.
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 07:27.