1

我是 mysql 初学者,目前正在研究外键。我想创建三个表:用户、项目、订单并将它们链接在一起

用户表:

CREATE TABLE users (
user_id INT(10) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
PRIMARY KEY(user_id)
);

物品表:

CREATE TABLE items (
item_id INT(10) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
PRIMARY KEY(item_id)
);

订单表:

CREATE TABLE orders (
order_id INT(10) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
item_id INT,
quantity INT(10) NOT NULL,
user_id INT,
PRIMARY KEY (order_id),
FOREIGN KEY (item_id) REFERENCES items (item_id),
FOREIGN KEY (user_id) REFERENCES users (user_id)
);

但我收到错误 1005: can't create table 'new.orders' (error:150)

我的代码有什么问题?

谢谢!

4

2 回答 2

5

主表列和引用表列的数据类型必须完全匹配。在您的定义中,items.item_idINT UNSIGNED,而外键orders.item_idINT(隐式SIGNED)。对于user_id.

更改定义如下,UNSIGNED为这两个添加:

CREATE TABLE orders (
  order_id INT(10) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
  item_id INT UNSIGNED,
  quantity INT(10) NOT NULL,
  user_id INT UNSIGNED,
  PRIMARY KEY (order_id),
  FOREIGN KEY (item_id) REFERENCES items (item_id),
  FOREIGN KEY (user_id) REFERENCES users (user_id)
);

然后正确构建:http ://sqlfiddle.com/#!2/cfab8

于 2013-03-02T23:24:11.190 回答
2

items 表中没有 student_id 列。您的意思是用户表中的 user_id 吗?

于 2013-03-02T23:17:29.010 回答