Tema: Error 150
Ver Mensaje Individual
  #4 (permalink)  
Antiguo 11/08/2010, 07:53
Avatar de gnzsoloyo
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, 5 meses
Puntos: 2658
Respuesta: Error 150

Para poder definir una FK en una tabla, ambos campos (PK de origen y campo FK) deben ser del mismo tipo en todos sus aspectos.
En tu ejemplo estás cruzando un campo VARCHAR(50) con un campo INT. ¿Cómo quieres que los pueda igualar? Es como poner que una manzana y una tuerca fuesen iguales.

Además, no puedes usar un campo AUTO_INCREMENT en una tabla MySQL sin que el mismo sea definido como PRIMARY KEY, por lo que en principio tampoco puedes crear la tabla de esa forma.
Si lo que quieres es relacionarla por el nombre de la empresa y no por la PK, el nombre debe ser declarado como UNIQUE, caso contrario no podrás hacer eso:

Código MySQL:
Ver original
  1. DROP TABLE IF EXISTS `cliente`;
  2. CREATE TABLE  `cliente` (
  3.   `id_cliente` int(11) NOT NULL auto_increment,
  4.   `empresa` varchar(50) default NULL,
  5.   `telefono` varchar(12) default NULL,
  6.   `email` varchar(100) default NULL,
  7.   `descripcion` varchar(250) default NULL,
  8.   PRIMARY KEY  (`id_cliente`),
  9.   UNIQUE KEY `empresa` (`empresa`)
  10.  
  11. DROP TABLE IF EXISTS `anuncios`;
  12. CREATE TABLE  `anuncios` (
  13.   `id_anuncio` int(11) NOT NULL auto_increment,
  14.   `empresa` varchar(50) NOT NULL,
  15.   `anuncio` varchar(100) default NULL,
  16.   PRIMARY KEY  (`id_anuncio`),
  17.   KEY `FK_anuncios_cliente` (`empresa`),
  18.   CONSTRAINT `FK_anuncios_cliente` FOREIGN KEY (`empresa`) REFERENCES `cliente` (`empresa`)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)