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

ERROR 1005 (HY000): Can't create table (errno: 150)

Estas en el tema de ERROR 1005 (HY000): Can't create table (errno: 150) en el foro de Mysql en Foros del Web. Nose por que al ejecutar la consulta ya sea en consola o phpmyadmin me arroja este error, si alguien ve el error que grite... CREATE ...
  #1 (permalink)  
Antiguo 18/01/2009, 23:27
 
Fecha de Ingreso: junio-2008
Mensajes: 119
Antigüedad: 15 años, 10 meses
Puntos: 1
ERROR 1005 (HY000): Can't create table (errno: 150)

Nose por que al ejecutar la consulta ya sea en consola o phpmyadmin me arroja este error, si alguien ve el error que grite...



CREATE TABLE `notas` (
`notasID` int(10) unsigned NOT NULL auto_increment,
`userID` mediumint(8) unsigned NOT NULL,
`posterTime` int(10) unsigned NOT NULL default '0',
`posterIP` tinytext NOT NULL,
`titulo` tinytext NOT NULL,
`cuerpo` text NOT NULL,
`tags` varchar(16),
`categoria` varchar(16) NOT NULL default 'xx',
FOREIGN KEY (`userID`) references usuarios,
PRIMARY KEY (`notasID`)
) ENGINE=InnoDB;


Saludosss...
  #2 (permalink)  
Antiguo 19/01/2009, 02:12
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: ERROR 1005 (HY000): Can't create table (errno: 150)

Antes debes haber creado la tabla usuarios con una primary key llamada userID que sea mediumint(8) unsigned auto_increment.

Luego

CREATE TABLE notas (
`notasID` int(10) unsigned NOT NULL auto_increment,
`userID` mediumint(8) unsigned NOT NULL,
`posterTime` int(10) unsigned NOT NULL default '0',
`posterIP` tinytext NOT NULL,
`titulo` tinytext NOT NULL,
`cuerpo` text NOT NULL,
`tags` varchar(16),
`categoria` varchar(16) NOT NULL default 'xx',
FOREIGN KEY (`userID`) references usuarios (`userID`),
PRIMARY KEY (`notasID`)
) ENGINE=InnoDB;

Y creo que debería funcionar.
  #3 (permalink)  
Antiguo 19/01/2009, 04:46
 
Fecha de Ingreso: junio-2008
Mensajes: 119
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: ERROR 1005 (HY000): Can't create table (errno: 150)

Nop probe y nada, alguna otra sigerencia???
  #4 (permalink)  
Antiguo 19/01/2009, 05:14
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, 5 meses
Puntos: 2658
Respuesta: ERROR 1005 (HY000): Can't create table (errno: 150)

Forzosamente debe ser un problema en la existencia de la tabla USUARIOS, tal y como te jurena. Probé el script con y sin la línea de referenciación y solamente falla al incluirla.
El problema de tu segundo post puede ser a causa de dos cosas: 1) La tabla USUARIOS que estás creando no incluye el campo `userID`. y 2) El campo sí está en esa tabla, pero no es PK o al menos UNIQUE y no está definido como KEY.
Prueba.
__________________
¿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 19/01/2009, 05:17
 
Fecha de Ingreso: junio-2008
Mensajes: 119
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: ERROR 1005 (HY000): Can't create table (errno: 150)

Ok dejo como muestra la tabla usuarios q tengo ya creada...

CREATE TABLE IF NOT EXISTS `usuarios` (
`username` varchar(50) NOT NULL default '',
`nick` varchar(15) NOT NULL,
`password` varchar(50) NOT NULL default '',
`email` varchar(150) NOT NULL default '',
`avatar` varchar(200) default '',
`pais` varchar(60) NOT NULL default 'Argentina',
`ciudad` varchar(60) NOT NULL default '',
`sexo` char(1) NOT NULL default '',
`fechan` date NOT NULL default '1980-01-01',
`sitioweb` varchar(50) default '',
`mensajep` varchar(50) default '',
`usuariodesde` date NOT NULL default '2008-12-26',
`userID` mediumint(8) unsigned NOT NULL auto_increment,
`rango` varchar(50) NOT NULL default 'Novato',
`activationHash` varchar(150) NOT NULL default '',
`active` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`userID`),
UNIQUE KEY `email` (`email`),
UNIQUE KEY `nick` (`nick`),
UNIQUE KEY `activationHash` (`activationHash`),
KEY `active` (`active`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;

Sera q el motor de esta es MyISAM, y por eso no anda???

Última edición por Chuecko; 19/03/2009 a las 23:20
  #6 (permalink)  
Antiguo 19/01/2009, 05:27
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, 5 meses
Puntos: 2658
Respuesta: ERROR 1005 (HY000): Can't create table (errno: 150)

Bueno, los FK no existen en el motor MyISAM. Son del InnoDB.

Por lo demás, esta estructura si funciona:
Código sql:
Ver original
  1. CREATE TABLE  `notas` (
  2.   `notasID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3.   `userID` INT(10) UNSIGNED NOT NULL,
  4.   `posterTime` INT(10) UNSIGNED NOT NULL,
  5.   `posterIP` tinytext NOT NULL,
  6.   `titulo` tinytext NOT NULL,
  7.   `cuerpo` text NOT NULL,
  8.   `tags` VARCHAR(16) DEFAULT NULL,
  9.   `categoria` VARCHAR(16) NOT NULL,
  10.   PRIMARY KEY  (`notasID`),
  11.   KEY `FK_notas_1` (`userID`),
  12.   FOREIGN KEY (`userID`) REFERENCES `usuarios` (`userID`)
  13. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Faltaba definir a ese campo como KEY, además de no hay que olvidarse que los campos deben ser del mismo tipo y que si usas un autonumerico, no te conviene un rango de representación inferior al INT.

Un tipo final: Si pones un campo como NOT NULL no tiene sentido que le des un valor DEFAULT, porque jamás lo podrá usar. Esos valores son operativos solamente en los campos NULL (que en este caso no pueden darse).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 19/01/2009, 05:45
 
Fecha de Ingreso: junio-2008
Mensajes: 119
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: ERROR 1005 (HY000): Can't create table (errno: 150)

Solucionado cambie el engine de usuarios a InnoDB, Muchas gracias por tus consejos gnzsoloyo
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 01:56.