2013-03-02 97 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