2012-08-04 98 views
0

請參閱我的create語句:錯誤代碼:1005不能創建表

CREATE TABLE INTERNAL_MEDICINE_DETAIL(DIAGNOSE_ITEM VARCHAR(15) NOT NULL, 
EXM_RESULT VARCHAR(50), 
IDENTIFY_ID INT AUTO_INCREMENT PRIMARY KEY, 
SUMMARY_ID INT NOT NULL, 
FOREIGN KEY(SUMMARY_ID) REFERENCES INTERNAL_MEDICINE_SUMMARY(SUMMARY_ID), 
FOREIGN KEY(DIAGNOSE_ITEM) REFERENCES INTERNAL_MEDICINE_ITEM_DEF(DIAGNOSE_ITEM)) 

引用的兩個表創建成功:

CREATE TABLE INTERNAL_MEDICINE_ITEM_DEF(DIAGNOSE_ITEM VARCHAR(15) NOT NULL, 
ITEM_DESCRIPTION VARCHAR(50) NOT NULL, 
IDENTIFY_ID INT AUTO_INCREMENT PRIMARY KEY) 

CREATE TABLE INTERNAL_MEDICINE_SUMMARY(SUMMARY_ID INT AUTO_INCREMENT PRIMARY KEY, 
SUMMARY VARCHAR(1000), 
R_IDENTIFYID INT NOT NULL, 
FOREIGN KEY(R_IDENTIFYID) REFERENCES BASICINFO(IDENTIFY_ID)) 

我見過的錯誤代碼1005的平均值MySQL的網站,它說: 無法創建表。如果錯誤消息引用錯誤150,則表創建失敗,因爲外鍵約束未正確形成。如果錯誤信息是指錯誤-1,表創建可能失敗,因爲該表包括匹配的內部InnoDB表的名稱,列名。

我目前的錯誤是150,但是我找不到INTERNAL_MEDICINE_DETAIL表中定義的兩個外鍵與INTERNAL_MEDICINE_SUMMARY AND INTERNAL_MEDICINE_ITEM_DEF中定義的兩個字段的區別。

所以,請你幫幫我,告訴我原因嗎?

回答

0

從InnoDB的foreign key constraints文檔:

InnoDB的允許外鍵引用列的任何索引列或組。但是,在被引用的表中,必須有一個索引,其中被引用的列按照相同順序列爲第一列。

您需要在INTERNAL_MEDICINE_ITEM_DEF上創建一個索引,並將DIAGNOSE_ITEM作爲第一列。 (無需更改INTERNAL_MEDICINE_SUMMARY任何事情,因爲引用的列是表的主鍵。)

+0

感謝,現在的工作。 – zhanzhex 2012-08-04 10:47:38

+0

不知道爲什麼有人投下來..創建索引對被引用表爲我工作。 – 2012-12-20 01:00:27

相關問題