繁体   English   中英

#1005 - 无法创建表'xxx.item'(错误号:150)

[英]#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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM