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

Claves ajenas en MYSQL

Estas en el tema de Claves ajenas en MYSQL en el foro de Bases de Datos General en Foros del Web. Wenas, estoy intentando declarar 2 claves ajenas a una tabla pero no consigo hacerlo, me da erro 1005 que segun creo es que las restricciones ...
  #1 (permalink)  
Antiguo 30/07/2004, 05:38
 
Fecha de Ingreso: diciembre-2003
Ubicación: Madrid
Mensajes: 80
Antigüedad: 20 años, 11 meses
Puntos: 0
Claves ajenas en MYSQL

Wenas, estoy intentando declarar 2 claves ajenas a una tabla pero no consigo hacerlo, me da erro 1005 que segun creo es que las restricciones no estan bien formuladas pero no se por donde falla.

Código:
CREATE TABLE equipo(

idequipo MEDIUMINT NOT NULL AUTO_INCREMENT ,
nombre VARCHAR( 15 ) ,
idpais smallint,
iddivision tinyint,
PRIMARY KEY ( idequipo ) ,
INDEX ( idpais, iddivision ) ,
FOREIGN KEY ( idpais ) REFERENCES pais( idpais ) ,
FOREIGN KEY ( iddivision ) REFERENCES division( iddivision ) 
) TYPE = INNODB
  #2 (permalink)  
Antiguo 30/07/2004, 12:06
 
Fecha de Ingreso: diciembre-2003
Ubicación: Madrid
Mensajes: 80
Antigüedad: 20 años, 11 meses
Puntos: 0
Nadie sabe como hacerlo?
  #3 (permalink)  
Antiguo 30/07/2004, 12:55
Avatar de padrino  
Fecha de Ingreso: mayo-2004
Ubicación: Aguascalientes, Ags. la tierra de la gente buena
Mensajes: 161
Antigüedad: 20 años, 5 meses
Puntos: 0
Como?????

OK, checa este tip, haber si funciona, y en tus tablas a las cuales hace referencia esta ponle tambien

de tu tabla pais del campo idpais que sea
PRIMARY KEY (idpais) , y INDEX (idpais)

al igual de tu tabla division
PRIMARY KEY (iddivision) , y INDEX (iddivision)


Cita:
CREATE TABLE equipo(
idequipo MEDIUMINT NOT NULL AUTO_INCREMENT ,
nombre VARCHAR(15) ,
idpais smallint,
iddivision tinyint,
INDEX (idpais,iddivision,idequipo) ,
PRIMARY KEY (idequipo) ,
FOREIGN KEY (idpais) REFERENCES pais(idpais) ,
FOREIGN KEY (iddivision) REFERENCES division(iddivision)
)TYPE=INNODB;
checale y comentanos como te fue
__________________
The God Father
__________________________________________
No hay un error tan grande como el de no seguir adelante (:pensando:) William Blake
  #4 (permalink)  
Antiguo 30/07/2004, 14:34
 
Fecha de Ingreso: diciembre-2003
Ubicación: Madrid
Mensajes: 80
Antigüedad: 20 años, 11 meses
Puntos: 0

Nada, no hay manera, sigue diciendome el mismo error y no lo entiendo. He comprobado que las 2 claves primarias de las tablas estan indexadas pero nada

MySQL ha dicho:

#1005 - Can't create table '.\test\equipo.frm' (errno: 150)

Ayuda please
  #5 (permalink)  
Antiguo 30/07/2004, 15:23
Avatar de padrino  
Fecha de Ingreso: mayo-2004
Ubicación: Aguascalientes, Ags. la tierra de la gente buena
Mensajes: 161
Antigüedad: 20 años, 5 meses
Puntos: 0
Haber

HABER, se que no son tus tablas pero crealas tal cual y en el orden en que te las muestro, espero que no marque error, si no marca trata de comparar tus tablas e implementalas con estas, espero te sirva, tambien ago referencia a un link donde te explican, lee y se paciente creeo que son 2 hojas de ese link, ok dinos como te fue y haber si funciona bites

Cita:
CREATE TABLE clientes(id INT NOT NULL, nom CHAR(25), INDEX (id), PRIMARY KEY (id))TYPE=INNODB;

CREATE TABLE promociones(id INT NOT NULL, nom_pro CHAR(25), INDEX (id), PRIMARY KEY (id))TYPE=INNODB;

CREATE TABLE rentas(id INT NOT NULL, clientes_id INT NOT NULL, promociones_id INT NOT NULL, PRIMARY KEY (id), INDEX (clientes_id), INDEX (promociones_id), FOREIGN KEY (clientes_id) REFERENCES clientes(id), FOREIGN KEY (promociones_id) REFERENCES promociones(id))TYPE=INNODB;

nota: creeo que es muy obio el etc son campos que le quieras agregar.
NOTA2: tambieb cuando creas llaves foraneas crea tus tablas de tipo INNODB, porque si no no hacer la referencia.

cuando creas las tablas crealas en este mismo orden y listo no debe de tener problemas a mi no me causo ya problemas.


todo esto lo investigue en la siguiente direccion tengan paciencia y leanlo todo:

http://www.programacion.com/bbdd/tu..._referencial/3/
__________________
The God Father
__________________________________________
No hay un error tan grande como el de no seguir adelante (:pensando:) William Blake
  #6 (permalink)  
Antiguo 01/08/2004, 09:39
 
Fecha de Ingreso: diciembre-2003
Ubicación: Madrid
Mensajes: 80
Antigüedad: 20 años, 11 meses
Puntos: 0
Buenas, gracias por las respuestas pero sigo sin poder conseguir declarar dos claves ajenas en una tabla.

He seguido los pasos que me distes(que me funcionaron perfectamente en la base de datos) pero al llevarlo a mis tablas no funcionaron...

Código:
CREATE TABLE pais (
  idpais smallint unsigned NOT NULL,
  descripcion varchar(30) NOT NULL,
  INDEX (idpais),
  PRIMARY KEY  (idpais),
) TYPE=InnoDB  ;
Código:
CREATE TABLE division (
 iddivision tinyint(4) NOT NULL,
  descripcion varchar(15),
  INDEX (iddivision),
  PRIMARY KEY  (iddivision),
) TYPE=InnoDB ;

Código:
CREATE TABLE equipo(
idequipo MEDIUMINT NOT NULL ,
nombre VARCHAR( 15 ) ,
id_pais smallint NOT NULL,
id_division tinyint NOT NULL,
PRIMARY KEY ( idequipo ) ,
INDEX (id_pais) ,
INDEX(id_division),
FOREIGN KEY (id_pais) REFERENCES pais( idpais ) ,
FOREIGN KEY (id_division) REFERENCES division( iddivision ) 
) TYPE = INNODB
No entiendo q puede pasar, porque con unas tablas y campos si funciona y con otro no

Ayuda please
  #7 (permalink)  
Antiguo 01/08/2004, 09:43
 
Fecha de Ingreso: diciembre-2003
Ubicación: Madrid
Mensajes: 80
Antigüedad: 20 años, 11 meses
Puntos: 0
Bueno pues por fin encontre cual era el fallo y no era otro que no declaraba las variables ajenas exactamente igual que estaban en las tablas(mas concretamente un UNSIGNED que se me colo por ahi :P )

Salu2 y Gracias
  #8 (permalink)  
Antiguo 02/08/2004, 08:38
Avatar de padrino  
Fecha de Ingreso: mayo-2004
Ubicación: Aguascalientes, Ags. la tierra de la gente buena
Mensajes: 161
Antigüedad: 20 años, 5 meses
Puntos: 0
Ok

Pues que bueno que ya pudiste, SALUDOS
__________________
The God Father
__________________________________________
No hay un error tan grande como el de no seguir adelante (:pensando:) William Blake
  #9 (permalink)  
Antiguo 02/08/2004, 08:39
Avatar de padrino  
Fecha de Ingreso: mayo-2004
Ubicación: Aguascalientes, Ags. la tierra de la gente buena
Mensajes: 161
Antigüedad: 20 años, 5 meses
Puntos: 0
ok

que buenoque ya pudiste, SALUDOS ....
__________________
The God Father
__________________________________________
No hay un error tan grande como el de no seguir adelante (:pensando:) William Blake
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 23:08.