我是一名 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:无法创建表 'new.orders'(错误:150)
我的代码有什么问题?
谢谢!
最佳答案
主表列和引用表列的数据类型必须完全匹配。在您的定义中,items.item_id
是 INT UNSIGNED
,而外键 orders.item_id
是 INT
(隐式签名
)。 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
关于Mysql外键错误150,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15180534/