Tema: Error 150
Ver Mensaje Individual
  #9 (permalink)  
Antiguo 20/08/2010, 09:54
fulll
 
Fecha de Ingreso: septiembre-2007
Mensajes: 18
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Error 150

Cita:
Iniciado por gnzsoloyo Ver Mensaje
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`)

muy buenas...

Pues añadiendo datos ala base de datos no se como pero me la he cargado, me ha desaparecido la tabla anuncios...
El caso es que la habia creado con el código este que pusiste, que iba perfecto.
Pues la he borrado y la intento volver a hacer y me da error, me pone lo siguiente:
A ver si me echais una mano que me estoy volviendo loco.

Código PHP:
Error
consulta SQL
:

CREATE TABLE   `cliente` (

  `
id_clienteINT11 NOT NULL AUTO_INCREMENT ,
  `
empresaVARCHAR50 ) DEFAULT NULL ,
  `
telefonoVARCHAR12 ) DEFAULT NULL ,
  `
emailVARCHAR100 ) DEFAULT NULL ,
  `
descripcionVARCHAR250 ) DEFAULT NULL ,
  
PRIMARY KEY  (  `id_cliente` ) ,
  
UNIQUE KEY  `empresa` (  `empresa` )
ENGINE INNODB DEFAULT CHARSET latin1;

MySQL ha dicho

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`cliente` (
  `id_clienteINT(11NOT NULL AUTO_INCREMENT,
  `empresaVARC at line 1