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

errno 150

Estas en el tema de errno 150 en el foro de Mysql en Foros del Web. tengo problemas con mysql al crear tablas utilizando las claves foraneas os dejo las tablas q tengo espero q me ayudeis gracias. --Tabla de entrenadores ...
  #1 (permalink)  
Antiguo 03/03/2009, 17:13
 
Fecha de Ingreso: marzo-2009
Mensajes: 4
Antigüedad: 15 años, 1 mes
Puntos: 0
errno 150

tengo problemas con mysql al crear tablas utilizando las claves foraneas os dejo las tablas q tengo espero q me ayudeis gracias.

--Tabla de entrenadores

CREATE TABLE IF NOT EXISTS `entrenadores` (
`dni_entrenador` varchar(12) NOT NULL,
`nombre` varchar(25) NOT NULL,
`apellido_1` varchar(25) NOT NULL,
`apellido_2` varchar(25) default NULL,
`lugar_nacimiento` varchar(30) default NULL,
`fecha_nacimiento` date default NULL,
`nacionalidad` varchar(20) default NULL,
`telefono` varchar(15) default NULL,
`correo` varchar(50) default NULL,
`usuario` varchar(25) default NULL,
`contrasenya` varchar(30) default NULL,
`cod_categoria` int(11) default NULL,
PRIMARY KEY (`dni_entrenador`),
KEY `cod_categoria` (`cod_categoria`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


--Tabla de jugadores

CREATE TABLE IF NOT EXISTS `jugadores` (
`dni_jugador` varchar(12) NOT NULL,
`nombre` varchar(25) NOT NULL default '',
`apellido_1` varchar(25) NOT NULL default '',
`apellido_2` varchar(25) default NULL,
`posicion` varchar(30) default NULL,
`lugar_nacimiento` varchar(30) default NULL,
`fecha_nacimiento` date default NULL,
`nacionalidad` varchar(20) default NULL,
`peso` float(5,2) default NULL,
`altura` float(3,2) default NULL,
`telefono` varchar(15) default NULL,
`correo` varchar(50) default NULL,
`usuario` varchar(25) default NULL,
`contrasenya` varchar(30) default NULL,
`convocado` enum('si','no') default NULL,
`cod_estadistica` int(5) NOT NULL auto_increment,
`cod_categoria` int(11) default NULL,
PRIMARY KEY (`dni_jugador`),
KEY `cod_estadistica` (`cod_estadistica`),
KEY `cod_categoria` (`cod_categoria`)
) ENGINE=INNODB DEFAULT CHARSET=latin1 ;

--Tabla comentarios_entrenadores

DROP TABLE IF EXISTS `comentarios_entrenadores`;
CREATE TABLE IF NOT EXISTS `comentarios_entrenadores` (
`dni_jugador` varchar(12) NOT NULL,
`dni_entrenador` varchar(12) NOT NULL,
`asunto` varchar(50) default NULL,
`fecha` date NOT NULL default '0000-00-00',
`hora` time NOT NULL default '00:00:00',
`comentario` text,
`leido` enum('si','no') default NULL,
`respuesta` enum('si','no') default NULL,
PRIMARY KEY (`fecha`,`hora`,`dni_jugador`),
KEY `fecha` (`fecha`),
KEY `hora` (`hora`),
KEY `dni_jugador` (`dni_jugador`),
FOREIGN KEY(`dni_jugador`) REFERENCES jugadores ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY(`dni_entrenador`) REFERENCES entrenadores ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

al ejecutar la ultima tabla me da este error
#1005 - Can't create table./147917comentarios_entrenadores.frm' (errno: 150)
  #2 (permalink)  
Antiguo 03/03/2009, 17:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: errno 150

Revisa que tengas espacio en disco para crear la tabla, o en dado caso permisos en el directorio donde estas creando la tabla.

Saludos
  #3 (permalink)  
Antiguo 03/03/2009, 18:58
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, 4 meses
Puntos: 2658
Respuesta: errno 150

Hay un error de sitaxis en la tercera tabla. Cuando se define una FK debe indicase además de la tabla referida, también el campo referido
El script quedaría:
Código sql:
Ver original
  1. CREATE TABLE  `entrenadores` (
  2.   `dni_entrenador` VARCHAR(12) NOT NULL,
  3.   `nombre` VARCHAR(25) NOT NULL,
  4.   `apellido_1` VARCHAR(25) NOT NULL,
  5.   `apellido_2` VARCHAR(25) DEFAULT NULL,
  6.   `lugar_nacimiento` VARCHAR(30) DEFAULT NULL,
  7.   `fecha_nacimiento` DATE DEFAULT NULL,
  8.   `nacionalidad` VARCHAR(20) DEFAULT NULL,
  9.   `telefono` VARCHAR(15) DEFAULT NULL,
  10.   `correo` VARCHAR(50) DEFAULT NULL,
  11.   `usuario` VARCHAR(25) DEFAULT NULL,
  12.   `contrasenya` VARCHAR(30) DEFAULT NULL,
  13.   `cod_categoria` INT(11) DEFAULT NULL,
  14.   PRIMARY KEY  (`dni_entrenador`),
  15.   KEY `cod_categoria` (`cod_categoria`)
  16. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  17.  
  18. CREATE TABLE  `jugadores` (
  19.   `dni_jugador` VARCHAR(12) NOT NULL,
  20.   `nombre` VARCHAR(25) NOT NULL DEFAULT '',
  21.   `apellido_1` VARCHAR(25) NOT NULL DEFAULT '',
  22.   `apellido_2` VARCHAR(25) DEFAULT NULL,
  23.   `posicion` VARCHAR(30) DEFAULT NULL,
  24.   `lugar_nacimiento` VARCHAR(30) DEFAULT NULL,
  25.   `fecha_nacimiento` DATE DEFAULT NULL,
  26.   `nacionalidad` VARCHAR(20) DEFAULT NULL,
  27.   `peso` FLOAT(5,2) DEFAULT NULL,
  28.   `altura` FLOAT(3,2) DEFAULT NULL,
  29.   `telefono` VARCHAR(15) DEFAULT NULL,
  30.   `correo` VARCHAR(50) DEFAULT NULL,
  31.   `usuario` VARCHAR(25) DEFAULT NULL,
  32.   `contrasenya` VARCHAR(30) DEFAULT NULL,
  33.   `convocado` enum('si','no') DEFAULT NULL,
  34.   `cod_estadistica` INT(5) NOT NULL AUTO_INCREMENT,
  35.   `cod_categoria` INT(11) DEFAULT NULL,
  36.   PRIMARY KEY  (`dni_jugador`),
  37.   KEY `cod_estadistica` (`cod_estadistica`),
  38.   KEY `cod_categoria` (`cod_categoria`)
  39. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  40.  
  41. CREATE TABLE  `comentarios_entrenadores` (
  42.   `dni_jugador` VARCHAR(12) NOT NULL,
  43.   `dni_entrenador` VARCHAR(12) NOT NULL,
  44.   `asunto` VARCHAR(50) DEFAULT NULL,
  45.   `fecha` DATE NOT NULL DEFAULT '0000-00-00',
  46.   `hora` TIME NOT NULL DEFAULT '00:00:00',
  47.   `comentario` text,
  48.   `leido` enum('si','no') DEFAULT NULL,
  49.   `respuesta` enum('si','no') DEFAULT NULL,
  50.   PRIMARY KEY  (`fecha`,`hora`,`dni_jugador`),
  51.   KEY `fecha` (`fecha`),
  52.   KEY `hora` (`hora`),
  53.   KEY `dni_jugador` (`dni_jugador`),
  54.   KEY `dni_entrenador` (`dni_entrenador`),
  55.   CONSTRAINT `comentarios_entrenadores_ibfk_1` FOREIGN KEY (`dni_jugador`) REFERENCES `jugadores` (`dni_jugador`) ON DELETE CASCADE ON UPDATE CASCADE,
  56.   CONSTRAINT `comentarios_entrenadores_ibfk_2` FOREIGN KEY (`dni_entrenador`) REFERENCES `entrenadores` (`dni_entrenador`) ON DELETE CASCADE ON UPDATE CASCADE
  57. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 04/03/2009, 10:14
 
Fecha de Ingreso: marzo-2009
Mensajes: 4
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: errno 150

lo he intentado como tu dices con la tabla de jugadores q lleva dos fk cod_categoria y cod_estadistica y me sigue saliendo el mismo error. Pongo las tablas como las he reado por si veis el errror gracias.

----Tabla estadisticas--


CREATE TABLE `estadisticas` (
`cod_estadistica` int(5) NOT NULL auto_increment,
`partidos_jugados` int(5) default '0',
`goles` int(5) default '0',
`goles_pie` int(5) default '0',
`goles_cabeza` int(5) default '0',
`goles_penalti` int(5) default '0',
`goles_falta` int(5) default '0',
`goles_contra` int(5) default '0',
`tarjetas_amarillas` int(5) default '0',
`tarjetas_rojas` int(5) default '0',
`asistencias` int(5) default '0',
PRIMARY KEY (`cod_estadistica`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;

---Tabla categorias---


CREATE TABLE `categorias` (
`cod_categoria` int(5) NOT NULL,
`nombre_categoria` varchar(30) NOT NULL,
PRIMARY KEY (`cod_categoria`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--Tabla jugadores--

CREATE TABLE jugadores (
dni_jugador varchar(12) NOT NULL,
nombre varchar(25) NOT NULL,
apellido_1 varchar(25) NOT NULL,
apellido_2 varchar(25),
posicion varchar(30),
lugar_nacimiento varchar(30),
fecha_nacimiento date DEFAULT '0000-00-00',
nacionalidad varchar(20),
peso float(5,2),
altura float(3,2),
telefono varchar(15),
correo varchar(50),
usuario varchar(25),
contrasenya varchar(30),
convocado enum('si','no') DEFAULT 'no',
cod_estadistica int(5) NOT NULL AUTO_INCREMENT,
cod_categoria int(5) ,
PRIMARY KEY (dni_jugador),
KEY cod_estadistica (cod_estadistica),
KEY cod_categoria (cod_categoria),
CONSTRAINT jugadores_ibfk_1 FOREIGN KEY (cod_estadistica) REFERENCES estadisticas ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT jugadores_ibfk_2 FOREIGN KEY (cod_categoria) REFERENCES categorias ON DELETE RESTRICT ON UPDATE CASCADE,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  #5 (permalink)  
Antiguo 04/03/2009, 11:55
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, 4 meses
Puntos: 2658
Respuesta: errno 150

No estás entendiendo:
Este segmento:
Cita:
REFERENCES categorias
debe ser reemplazado por este:
Cita:
REFERENCES categorias(`cod_estadistica)
Y este:
Cita:
REFERENCES estadisticas
Por este:

Cita:
REFERENCES estadisticas(`cod_categoria`)
El tema, te lo repito, es que la relación de FK no se hace con la tabla, sino con el campo de la tabla. La relación no es automática, sino determinada
__________________
¿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 05:04.