2014-11-23 67 views
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表[努力學習一些誼]

我在做什麼錯在這裏?

+0

也許使類別無符號? – 2014-11-23 21:33:12

+1

你有幾個unsigned缺少,你引用一個缺少的表(sbb_type),表的順序是錯誤的,你正在創建外鍵到尚未創建的表,還引用表名稱在他們的單數http: //sqlfiddle.com/#!2/689104 – Mihai 2014-11-23 21:35:11

+1

SQL Fiddle在第一個表上產生一個錯誤,因爲沒有定義外鍵引用表。當使用'drop table if exists'時可能會遇到所有問題,並且您有現有的表結構錯誤。 – 2014-11-23 21:35:55

回答

1

我敢肯定,原因是idsbb_categoriescategory,sbb_catalog之間的數據類型不匹配。從前者中刪除unsigned或將其添加到後者。 對於所有其他外鍵引用也是如此。

由於@Mihai在評論你也有不匹配的名字中指出 - 這顯然需要例如要這麼改:

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

應改爲

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

進行這些更改會使其正常工作(至少在SQL Fiddle

+0

謝謝!是的,它似乎確實是這些東西的組合。 – 2014-11-23 21:57:06