Mysql #1005-Can';t创建表';xxx.项目';(错误编号:150)
我正在为一家酒店创建数据库,但无法创建Mysql #1005-Can';t创建表';xxx.项目';(错误编号:150),mysql,Mysql,我正在为一家酒店创建数据库,但无法创建“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 ,
“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)
);
请帮我摆脱困境 假设这就是您正在运行的所有SQL,这里的问题是没有
餐厅
表,因此尝试创建菜单\u类别\u项
会出现错误150
由于menu\u category\u item
未能创建,因此item
无法引用它,因此也给出了150错误
这在下面的
ER\u CANT\u CREATE\u表中有详细说明
我认为您需要对外键的目标设置一个唯一的索引/约束(在这种情况下,menu_category_item.item_id可以让它知道目标表中的哪一行被引用。但是我可能会混淆我的SQL风格我认为问题在于数据库的结构,您应该将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)
);
如果我是正确的,您的项目表将包含项目,您需要一个主键。菜单项目类别基本上是将项目与菜单匹配,因此您可以在这里添加外键
@Adam的评论如下:
一般来说:1-每个表都应该有一个主键,2-外键
键通常应该与目标表中的主键相对
是例外,但这些规则是基本数据库的良好起点
国际海事组织设计
菜单\类别\项。项\ id
未定义索引
需要对外键
约束进行监督
添加此-ALTER TABLE menu\u category\u item添加索引菜单\u category\u item(菜单\u category\u item)
我的数据库中有餐厅表。创建表菜单\类别\项时没有错误。但我在创建项目表时出错。请将此添加到查询的末尾
ALTER table menu \类别\项添加索引菜单\类别\项(菜单\类别\项)
在创建菜单(类别)项时
表。这样在创建项目表时不会出现错误谢谢段落..我会尝试一下..Simon你能告诉我InnoDB命令吗?因为我在InnoDB中找不到任何东西你的意思是说我应该更改菜单(类别)项并使项目(id)唯一吗?@gagandepsharma不你不能不要这样做,因为您可能在>1菜单上有一个项目。您需要将项目id作为项目表的主键。检查我的答案。请参阅@Joshua Kissoon的答案。作为规则:1-每个表都应该有一个主键,2-外键通常应该与目标表的主键相对。有例外,但这些规则是良好的开始在IMO中为基本DB设计预留位置。OP的表中没有这样的列menu\u category\u item
。menu\u category\u item
。这听起来像是建议添加一个新列,然后index
it。顺便说一句:OP发布的edit
中有以前版本没有的错误。您最好回滚编辑version 2
@Ravinder-是一个打字错误。谢谢:)可能遗漏了一些内容。但我还是回到了你的版本。Joshua非常感谢。我会试试这个。我会重新设计这两个表,让你知道。
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`)
);