错误代码:1005无法创建表

时间:2012-08-04 10:05:03

标签: mysql

请参阅我的创建声明:

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

我在MySQL网站上看到了错误代码1005的意思,它说: 无法创建表。如果错误消息引用错误150,则表创建失败,因为未正确形成外键约束。如果错误消息引用错误-1,则表创建可能失败,因为该表包含与内部InnoDB表的名称匹配的列名。

我的错误当前是150,但我找不到INTERNAL_MEDICINE_DETAIL表中定义的两个外键与INTERNAL_MEDICINE_SUMMARY和INTERNAL_MEDICINE_ITEM_DEF中定义的两个字段的区别。

那么,你能帮助我并告诉我原因吗?

1 个答案:

答案 0 :(得分:0)

来自InnoDB foreign key constraints文档:

  

InnoDB允许外键引用任何索引列或列组。但是,在引用的表中,必须有一个索引,其中引用的列被列为相同顺序的第一列。

您需要在INTERNAL_MEDICINE_ITEM_DEF上创建一个以DIAGNOSE_ITEM作为第一列的索引。 (无需为INTERNAL_MEDICINE_SUMMARY更改任何内容,因为引用的列是该表的主键。)