[英]#1005 - Can't create table 'xxx.item' (errno: 150)
我正在为酒店创建数据库,我无法创建"Item"
表。
显示的错误是
#1005 - Can't create table 'xxx.item' (errno: 150)
以下是我的SQL查询:
create table menu (
menu_id INT
, menu_name varchar(100)
, PRIMARY KEY (menu_id)
);
create table categories (
categories_id INT
, category_name varchar(100)
, PRIMARY KEY (categories_id)
);
create table menu_category_item (
mci_id INT
, menu_id INT
, categories_id INT
, item_id INT
, item_type INT
, restaurant_id INT
, PRIMARY KEY (mci_id)
, FOREIGN KEY (menu_id)
REFERENCES menu(menu_id)
, FOREIGN KEY (categories_id)
REFERENCES categories(categories_id)
, FOREIGN KEY (restaurant_id)
REFERENCES restaurants(restaurant_id)
);
create table item (
item_id INT
, item_name varchar(100)
, item_price decimal
, FOREIGN KEY (item_id)
REFERENCES menu_category_item (item_id)
);
请帮帮我!
我认为问题出在数据库的结构中,你应该将item_id作为item表中的主键,然后让menu_category_item表引用它。 喜欢:
create table item (
item_id INT
, item_name varchar(100)
, item_price decimal
, PRIMARY KEY (item_id));
create table menu_category_item (
mci_id INT
, menu_id INT
, categories_id INT
, item_id INT
, item_type INT
, restaurant_id INT
, PRIMARY KEY (mci_id)
, FOREIGN KEY (menu_id)
REFERENCES menu(menu_id)
, FOREIGN KEY (categories_id)
REFERENCES categories(categories_id)
, FOREIGN KEY (restaurant_id)
REFERENCES restaurants(restaurant_id)
, FOREIGN KEY (item_id)
REFERENCES item(item_id)
);
如果我是正确的,您的项目表将包含项目,那么您需要一个主键。 而menu_item_category基本上是将项目与菜单匹配,因此您可以在其中添加外键。
来自@Adam的评论如下:
通常:1 - 每个表都应该有一个主键,而2 - 外键通常应该与目标表的主键相对。 有一些例外,但这些规则是基本数据库设计IMO的良好起点
假设这是您正在运行的所有SQL,这里的问题是没有restaurants
表,因此尝试创建menu_category_item
会给出错误150。
由于menu_category_item
无法创建,因此item
无法引用它,因此也会给出150错误。
这在ER_CANT_CREATE_TABLE
下的InnoDB错误代码中有详细ER_CANT_CREATE_TABLE
。
我认为你需要一个唯一的索引/约束对象的目标(在这种情况下menu_category_item.item_id,以便它知道目标表中的哪一行被引用。但我可能会让我的SQL风格混淆
menu_category_item.item_id
没有定义索引。
需要FOREIGN KEY
约束。
添加了这个 - ALTER TABLE menu_category_item ADD INDEX menu_category_item (menu_category_item)
CREATE TABLE menu_category_item (
mci_id INT ,
menu_id INT,
categories_id INT ,
item_id INT ,
item_type INT,
restaurant_id INT ,
PRIMARY KEY (mci_id),
FOREIGN KEY (menu_id) REFERENCES menu(menu_id),
FOREIGN KEY (categories_id) REFERENCES categories(categories_id),
FOREIGN KEY (restaurant_id) REFERENCES restaurants(restaurant_id),
ALTER TABLE `menu_category_item` ADD INDEX `item_id` (`item_id`)
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.