2014-01-30 49 views
0

我有陰影的顏色,看起來像這樣不能創建兩個表

CREATE TABLE `Shade` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `shade_name` varchar(250) DEFAULT NULL, 
    `color_id` int(11) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=156 DEFAULT CHARSET=latin1; 

而且我已經得到了Color表需要有與Shade表中的一個一對多的關係,關係。所以這是我做過什麼:

CREATE TABLE `Color` (
    `id` int(11) unsigned NOT NULL, 
    `color_name` varchar(250) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
    ,foreign key (`id`) references shade (`color_id`) 
    on delete cascade 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

但我發現了一個錯誤:Can't create table: errno: 150

+0

在color_id上創建一個索引。 –

回答

0

你定義在錯誤的地方你的外鍵。

Color是你的「主」表中,所以它不應該定義任何外鍵:

CREATE TABLE `Color` (
    `id` int(11) unsigned NOT NULL, 
    `color_name` varchar(250) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

Shade是「細節」表 - 它(由它所包含的color_id列明顯)引用Color ,因此它應該保持外鍵的定義:

CREATE TABLE `Shade` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `shade_name` varchar(250) DEFAULT NULL, 
    `color_id` int(11) unsigned NOT NULL, 
    PRIMARY KEY (`id`), 
    FOREIGN KEY (`color_id`) references Color (`id`) 
    ON DELETE CASCADE 
) ENGINE=InnoDB AUTO_INCREMENT=156 DEFAULT CHARSET=latin1; 
+1

...並使表Shade中的color_id無符號。 – fancyPants

+0

這只是'UNSIGNED',這是這裏的問題。 – Kermit

+0

@fancyPants好的,趕緊,謝謝!相應地修復了我的帖子 – Mureinik