2012-09-18 85 views
1

我似乎無法在這裏創建第三個表。這是怎麼回事?我得到了通用不能創建表errno 150消息。好像有事情做與外鍵無法創建表由於外鍵

表配方

CREATE TABLE recipe(
    recipe_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, 
    name VARCHAR(40) NOT NULL, 
    description VARCHAR(40) NOT NULL, 
    PRIMARY KEY (recipe_id) 
) 
ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_swedish_ci; 

表ingredient_type

CREATE TABLE ingredient_type(
    ingredient_type_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, 
    ingredient_type VARCHAR(40) NOT NULL, 
    description VARCHAR(40) NOT NULL, 
    PRIMARY KEY (ingredient_type_id) 
) 
ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_swedish_ci; 

表成分

CREATE TABLE ingredient(
    ingredient_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, 
    ingredient_type_id INT(10) NOT NULL, 
    name VARCHAR(40) NOT NULL, 
    brand_name VARCHAR(40) NOT NULL, 
    FOREIGN KEY (ingredient_type_id) REFERENCES ingredient_type (ingredient_type_id), 
    PRIMARY KEY (ingredient_id) 
) 
ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_swedish_ci; 
+1

'ingredient_type.ingredient_type_id'是'unsigned','ingredient.ingredient_type_id'不是。 – DCoder

+0

謝謝一堆...不能相信我錯過了! – user1679724

+0

@直接將它作爲答案,以便它可以被接受並且不被列爲未答覆。 –

回答

1

外鍵和引用鍵中的相應列必須在InnoDB內部具有相似的內部數據類型,以便可以在不進行類型轉換的情況下進行比較。 整數類型的大小和符號必須相同。字符串類型的長度不需要相同。對於非二進制(字符)字符串列,字符集和歸類必須相同。

來源:FOREIGN KEY Constraints in the MySQL manual

的問題在你的代碼是ingredient_type.ingredient_type_idunsigned,但ingredient.ingredient_type_id不是。