2012-09-18 60 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不是。