1

我有三张桌子

  1. 订单表

    • ID
    • 用户名
    • 美食家
    • 酒鬼
  2. 食物

    • 美食家
    • 姓名
    • 酒鬼
    • 姓名

命令如下 创建 order_table 表-------------------------------------------- -----

create table order_table(
id int not null auto_increment, 
user_name varchar(26) not null, 
foodid int(11) not null, 
drinkid int(11) not null, 
primary key(id), 
FOREIGN KEY (foodid) REFERENCES food(foodid),
FOREIGN KEY (drinkid) REFERENCES food(drinkid)
)ENGINE=innodb;

创建食物表 ------------------------------------------------------------ --------

create table food (
foodid int(11) not null auto_increment, 
name varchar(26) not null, 
primary key(foodid)
)ENGINE=innodb;

创建饮料表 ------------------------------------------------------------ --------

create table drink (
drinkid int(11) not null auto_increment, 
name varchar(26) not null, 
primary key(drinkid)
)ENGINE=innodb;

现在我遇到的问题是

ERROR 1005 : Can't create table 't.order_table' (errno: 150)

其中 t 是我的数据库名称,所以我可以为这段代码做什么,谢谢大家。

4

1 回答 1

1

需要纠正三个问题。首先,FOREIGN KEY定义需要()围绕列名,如下所示:

FOREIGN KEY (foodid) REFERENCES food (foodid),
/*---------^^^^^^^^^^----------------^^^^^^^^*/

其次,您的drinkid外键定义引用了错误的表,food而不是drink

FOREIGN KEY (drinkid) REFERENCES drink(drinkid)

最后,您必须重新排列表顺序,以便在它引用的两个表之后order_table创建。把它们放在一起。然后它将正确执行,如本演示所示:http ://sqlfiddle.com/#!2/b3aee

create table food (
  foodid int(11) not null auto_increment, 
  name varchar(26) not null, 
  primary key(foodid)
)ENGINE=innodb;

create table drink (
  drinkid int(11) not null auto_increment, 
  name varchar(26) not null, 
  primary key(drinkid)
)ENGINE=innodb;

create table order_table(
  id int not null auto_increment, 
  user_name varchar(26) not null, 
  foodid int(11) not null, 
  drinkid int(11) not null, 
  primary key(id), 
  FOREIGN KEY (foodid) REFERENCES food(foodid),
  FOREIGN KEY (drinkid) REFERENCES drink(drinkid)
)ENGINE=innodb;
于 2013-03-04T01:28:56.653 回答