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

Error 150

Estas en el tema de Error 150 en el foro de Mysql en Foros del Web. Buenas, antes de nada decir que estoy empezando con mysql. Estoy creando dos tablas y me da este error. Las intento unir por el campo ...
  #1 (permalink)  
Antiguo 05/08/2010, 11:18
 
Fecha de Ingreso: septiembre-2007
Mensajes: 18
Antigüedad: 16 años, 7 meses
Puntos: 0
Error 150

Buenas, antes de nada decir que estoy empezando con mysql.

Estoy creando dos tablas y me da este error. Las intento unir por el campo empresa y no me deja.

Serían dos tablas; una cliente y otra anuncios. Cada cliente puede dar de alta los anuncios que desee.

Os copio el codigo SQL aver si me podeis echar un cable.

Código:
CREATE TABLE cliente
(
id_cliente INT AUTO_INCREMENT ,
empresa VARCHAR( 50 ) ,
telefono VARCHAR( 12 ) ,
email VARCHAR( 100 ) ,
descripcion VARCHAR( 250 ) ,
PRIMARY KEY ( id_cliente )
) ENGINE = INNODB;

CREATE TABLE anuncios 
(
id_anuncio INT NOT NULL auto_increment,
empresa INT NOT NULL,
anuncio VARCHAR(100),
PRIMARY KEY(id_anuncio),
INDEX (empresa),
FOREIGN KEY (empresa) REFERENCES cliente(empresa)
) ENGINE = INNODB;

Un saludo y gracias!
  #2 (permalink)  
Antiguo 05/08/2010, 11:35
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: Error 150

Uan FOREIGN KEY es un campo o conjunto de campos que hacen referencia a la PRIMARY KEY de otra tabla.
En tu caso, "empresa" no es PK de la tabla Cliente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 11/08/2010, 07:16
 
Fecha de Ingreso: septiembre-2007
Mensajes: 18
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Error 150

No se como hacerlo, por mas que he probado no me funciona y si funciona, va mal.

Como sería el código?

CREATE TABLE cliente
(
id_cliente INT AUTO_INCREMENT ,
empresa VARCHAR( 50 ) ,
telefono VARCHAR( 12 ) ,
email VARCHAR( 100 ) ,
descripcion VARCHAR( 250 ) ,
PRIMARY KEY ( empresa)
) ENGINE = INNODB;

CREATE TABLE anuncios
(
id_anuncio INT NOT NULL auto_increment,
empresa INT NOT NULL,
anuncio VARCHAR(100),
PRIMARY KEY(id_anuncio),
INDEX (empresa),
FOREIGN KEY (empresa) REFERENCES cliente(empresa)
) ENGINE = INNODB;
  #4 (permalink)  
Antiguo 11/08/2010, 07:53
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: 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)
  #5 (permalink)  
Antiguo 11/08/2010, 08:11
 
Fecha de Ingreso: septiembre-2007
Mensajes: 18
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Error 150

ok gracias tio, voy a probarlo
  #6 (permalink)  
Antiguo 13/08/2010, 09:42
 
Fecha de Ingreso: septiembre-2007
Mensajes: 18
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Error 150

En principio ya está todo solucionado, pero ahora tengo otro problema;

Quiero poder añadir videos de forma que en una página muestre todos los clientes, pinchas en en el cliente y te lleva a otra página donde simplemente hay un <input type="file"> y otro campo oculto que recibe la empresa que has selecionado antes, para la que quieres subir el video.

En el siguiente script, el cual lanza la consulta, no me añade el campo ala tabla videos, llevo probando dos dias y buscando info y no encuentro la solucion, aver si me podeis echar una mano.

Os copio el SQL:
Cita:
$sql = "INSERT INTO `projectVideos`.`anuncios` (`id_anuncio`, `empresa`, `anuncio`, `categoria`) VALUES (NULL, '".$_REQUEST["empresa"]."', '".$_REQUEST["anuncio"]."', '')";

Creo que los tiros andan por la unión de las tablas pero no se me ocurre nada...
  #7 (permalink)  
Antiguo 13/08/2010, 09:57
 
Fecha de Ingreso: septiembre-2007
Mensajes: 18
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Error 150

No se como lo he echo pero ya los añade aunque da un error, voy a ver que pasa.

Gracias de todas formas.
  #8 (permalink)  
Antiguo 13/08/2010, 10:04
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: Error 150

Habría que analizar los datos que están entrando, porque la sentencia se ve bien...

¿Qué error da?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 20/08/2010, 09:54
 
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 
  #10 (permalink)  
Antiguo 20/08/2010, 10:19
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: Error 150

La sentencia no contiene errores de sintaxis. Lo que puede ser es que se esté mezclando con alguna sentencia anterioro o posterior en la misma ejecución.
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`)

Por allí debes tener cuidado cn los espacios puestos antes y después de los paréntesis. En algunos casos pueden dar problemas (depende del modo SQL del server). An cualquier caso, no pongas espacios donde no son necesarios.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 20/08/2010, 13:27
 
Fecha de Ingreso: septiembre-2007
Mensajes: 18
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Error 150

Eso es lo que devuelve sql, va sin espacios, no se que pasa.
He creado otra base de datos, ejecuto la sentencia y nada...

No se que le pasa..

Etiquetas: Ninguno
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 19:23.