未使用errno 105创建MySQL外键和表

未使用errno 105创建MySQL外键和表,mysql,innodb,Mysql,Innodb,我正在尝试使用以下SQL向数据库添加一些表,问题是它正在创建第一个表,但引发了一个错误: [Err] 1005 - Can't create table 'BigBlockStudios_woodcraft.sbb_categories' (errno: 150) 当我试着运行它的时候 SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `sbb_catalog` -- ------

我正在尝试使用以下SQL向数据库添加一些表,问题是它正在创建第一个表,但引发了一个错误:

[Err] 1005 - Can't create table 'BigBlockStudios_woodcraft.sbb_categories' (errno: 150)
当我试着运行它的时候

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `sbb_catalog`
-- ----------------------------
DROP TABLE IF EXISTS `sbb_catalog`;
CREATE TABLE `sbb_catalog` (
  `id` int(8) unsigned NOT NULL AUTO_INCREMENT,
  `sku` varchar(50) NOT NULL,
  `category` int(8) NOT NULL,
  `type` int(8) NOT NULL,
  `make` int(8) NOT NULL,
  `model` int(8) NOT NULL,
  `year` int(8) NOT NULL,
  PRIMARY KEY (`id`),
  INDEX (`category`,`type`,`make`,`model`,`year`),
  FOREIGN KEY (`category`) REFERENCES sbb_categories(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  FOREIGN KEY (`type`) REFERENCES sbb_type(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  FOREIGN KEY (`make`) REFERENCES sbb_make(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  FOREIGN KEY (`model`) REFERENCES sbb_model(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  FOREIGN KEY (`year`) REFERENCES sbb_year(`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- ----------------------------
-- Table structure for `sbb_categories`
-- ----------------------------
DROP TABLE IF EXISTS `sbb_categories`;
CREATE TABLE `sbb_categories` (
  `id` int(8) unsigned NOT NULL AUTO_INCREMENT,
  `category` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

-- ----------------------------
-- Table structure for `sbb_makes`
-- ----------------------------
DROP TABLE IF EXISTS `sbb_makes`;
CREATE TABLE `sbb_makes` (
  `id` int(8) unsigned NOT NULL AUTO_INCREMENT,
  `make` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

-- ----------------------------
-- Table structure for `sbb_models`
-- ----------------------------
DROP TABLE IF EXISTS `sbb_models`;
CREATE TABLE `sbb_models` (
  `id` int(8) unsigned NOT NULL AUTO_INCREMENT,
  `model` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

-- ----------------------------
-- Table structure for `sbb_vehicle_types`
-- ----------------------------
DROP TABLE IF EXISTS `sbb_vehicle_types`;
CREATE TABLE `sbb_vehicle_types` (
  `id` int(8) unsigned NOT NULL AUTO_INCREMENT,
  `type` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

-- ----------------------------
-- Table structure for `sbb_years`
-- ----------------------------
DROP TABLE IF EXISTS `sbb_years`;
CREATE TABLE `sbb_years` (
  `id` int(8) unsigned NOT NULL AUTO_INCREMENT,
  `year` decimal(4,0) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
我第一次尝试使用内置关系创建innodb表[尝试学习一些YII]


我在这里做错了什么?

我很确定原因是
sbb_categories
中的
id
列与
sbb_catalog
中的
category
列之间的数据类型不匹配。从前者中删除
未签名的
,或将其添加到后者中所有其他外键引用也是如此。

正如@Mihai在一篇评论中指出的,你也有不匹配的名字-这显然需要更改,例如:

FOREIGN KEY (`type`) REFERENCES sbb_type(`id`) 
应改为

FOREIGN KEY (`type`) REFERENCES sbb_types(`id`) 

进行这些更改可以使其工作(至少在中)

也可以使类别无符号?您缺少两个无符号的表,并且您引用了一个缺少的表(sbb_类型),而且表顺序错误您正在为尚未创建的表创建外键,此外,在单数SQL FIDLE中引用表名会在第一个表上产生错误,因为没有定义外键引用表。如果存在
drop table,并且现有表的结构不正确,则使用
drop table时可能会出现各种问题。
SET FOREIGN\u KEY\u CHECKS=0应消除对正确顺序的需要@Mihai谢谢!是的,它确实似乎是这些东西的组合。