0

请参阅我的创建声明:

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 中定义的两个字段的区别。

所以,你能帮我告诉我原因吗?

4

1 回答 1

0

从 InnoDB外键约束文档:

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

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

于 2012-08-04T10:26:52.383 回答