2013-03-02 103 views
1

我是一个mysql初学者,我目前正在研究外键。 我想创建三个表:用户,项目,订单和它们连接在一起Mysql外键错误150

用户表:

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) 
); 

Orders表:

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)

什么是错我的代码?

谢谢!

回答

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

+0

谢谢,问题解决了 – nut 2013-03-02 23:30:00

2

项目表中没有column student_id。你是否在用户表中指的是user_id?

+0

谢谢,我只是编辑,但仍然有问题 – nut 2013-03-02 23:18:55

+0

笑再次编辑,谢谢,但仍然有问题 – nut 2013-03-02 23:23:08