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

Error al intentar crear llaves foraneas

Estas en el tema de Error al intentar crear llaves foraneas en el foro de Mysql en Foros del Web. Buenas estoy intentando crear una llave foranea entre estas dos tablas y me ha dado el siguiente error "Can't create table (errno: 150)", haber quien ...
  #1 (permalink)  
Antiguo 22/06/2008, 10:56
Avatar de Energy  
Fecha de Ingreso: abril-2002
Ubicación: Juangriego, Margarita
Mensajes: 468
Antigüedad: 22 años
Puntos: 0
Error al intentar crear llaves foraneas

Buenas estoy intentando crear una llave foranea entre estas dos tablas y me ha dado el siguiente error "Can't create table (errno: 150)", haber quien me pueda echar una manito en que me estoy equivocando
Saludos


Código:
 
CREATE TABLE `clientes` (
  `ID` int(11) NOT NULL auto_increment,
  `nombre` varchar(20)  NOT NULL,
  `dir` text collate  NOT NULL,
  `correo` varchar(30)  NOT NULL,
  `contacto` varchar(30)NOT NULL,
  `telefono` varchar(12)NOT NULL,
  `campo0` varchar(50)NOT NULL,
  `campo1` varchar(50)NOT NULL,
  `campo2` varchar(50)NOT NULL,
  `campo3` varchar(50)NOT NULL,
  `campo4` varchar(50)NOT NULL,
  `fecha` date NOT NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=INNODB ;
 
 
CREATE TABLE `equipos` (
  `ID` int(11) NOT NULL auto_increment,
  `cod` varchar(15) NOT NULL default '',
  `ubicacion` text NOT NULL,
  `descrip` text NOT NULL,
  `marca` varchar(40) NOT NULL default '',
  `compuesto` varchar(100) NOT NULL default '',
  `campo0` varchar(100) NOT NULL default '',
  `campo1` varchar(100) NOT NULL default '',
  `campo2` varchar(100) NOT NULL default '',
  `campo3` varchar(100) NOT NULL default '',
  `campo4` varchar(100) NOT NULL default '',
  `campo5` varchar(100) NOT NULL default '',
  `campo6` varchar(100) NOT NULL default '',
  `campo7` varchar(100) NOT NULL default '',
  `campo8` varchar(100) NOT NULL default '',
  `campo9` varchar(100) NOT NULL default '',
  `campo10` varchar(100) NOT NULL default '',
  `campo11` varchar(100) NOT NULL default '',
  `campo12` varchar(100) NOT NULL default '',
  `campo13` varchar(100) NOT NULL default '',
  `campo14` varchar(100) NOT NULL default '',
  `obs` text NOT NULL,
  `cliente` int(11) NOT NULL default '0',
  `autor` int(11) NOT NULL,
  PRIMARY KEY  (`ID`),
  INDEX cli(`cliente`)
  FOREIGN KEY (cliente) REFERENCES clientes(ID)
  ON DELETE CASCADE
) ENGINE=InnoDB  ;
__________________
Gabriel Ferragut
Energy Systems
Linux Registered User Nº #292911
  #2 (permalink)  
Antiguo 23/06/2008, 06:19
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Error al intentar crear llaves foraneas

Código:
DROP TABLE IF EXISTS `equipos`;
CREATE TABLE `equipos` (
  `ID` int(11) NOT NULL auto_increment,
  `cod` varchar(15) NOT NULL default '',
  `ubicacion` text NOT NULL,
  `descrip` text NOT NULL,
  `marca` varchar(40) NOT NULL default '',
  `compuesto` varchar(100) NOT NULL default '',
  `campo0` varchar(100) NOT NULL default '',
  `campo1` varchar(100) NOT NULL default '',
  `campo2` varchar(100) NOT NULL default '',
  `campo3` varchar(100) NOT NULL default '',
  `campo4` varchar(100) NOT NULL default '',
  `campo5` varchar(100) NOT NULL default '',
  `campo6` varchar(100) NOT NULL default '',
  `campo7` varchar(100) NOT NULL default '',
  `campo8` varchar(100) NOT NULL default '',
  `campo9` varchar(100) NOT NULL default '',
  `campo10` varchar(100) NOT NULL default '',
  `campo11` varchar(100) NOT NULL default '',
  `campo12` varchar(100) NOT NULL default '',
  `campo13` varchar(100) NOT NULL default '',
  `campo14` varchar(100) NOT NULL default '',
  `obs` text NOT NULL,
  `cliente` int(11) NOT NULL default 0,
  `autor` int(11) NOT NULL,
  PRIMARY KEY  (`ID`),
  KEY `ind_equipos_2` (`cliente`),
  CONSTRAINT `FK_equipos_1` FOREIGN KEY (`cliente`) REFERENCES `clientes` (`ID`) ON DELETE CASCADE)
  ENGINE=InnoDB;
Así y en MySql 5.0.45 comunity-nt-log me lo ha ejecutado....

No veo muy claro ese NOT NULL default 0 en cliente...? El id de clientes es auto incremental va ha empezar en 1 por lo que nunca será cero luego no te permitirá entrar equipos sin cliente... igual es lo que quieres ... si quieres poder entrar equipos sin cliente el default deberia ser null para que se pueda respetar la FK (permite valores que esten en clientes o nulo)

`cliente` int(11),


Quim
  #3 (permalink)  
Antiguo 26/06/2008, 10:07
Avatar de Energy  
Fecha de Ingreso: abril-2002
Ubicación: Juangriego, Margarita
Mensajes: 468
Antigüedad: 22 años
Puntos: 0
Respuesta: Error al intentar crear llaves foraneas

Gracias por la info la verdad estoy leyendo apenas sobre integridad referencial y como he leido es practicamente teoria no conozco del tema muchas gracias
__________________
Gabriel Ferragut
Energy Systems
Linux Registered User Nº #292911
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 16:15.