0
我尝试使用下面的SQL添加一些表格,数据库,问题是它创建的第一个表,而是抛出一个错误:MySQL的外键和表不与错误号创建105
[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表[努力学习一些谊]
我在做什么错在这里?
也许使类别无符号? – 2014-11-23 21:33:12
你有几个unsigned缺少,你引用一个缺少的表(sbb_type),表的顺序是错误的,你正在创建外键到尚未创建的表,还引用表名称在他们的单数http: //sqlfiddle.com/#!2/689104 – Mihai 2014-11-23 21:35:11
SQL Fiddle在第一个表上产生一个错误,因为没有定义外键引用表。当使用'drop table if exists'时可能会遇到所有问题,并且您有现有的表结构错误。 – 2014-11-23 21:35:55