请参阅我的创建声明:
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中定义的两个字段的区别。
那么,你能帮助我并告诉我原因吗?
答案 0 :(得分:0)
来自InnoDB foreign key constraints文档:
InnoDB允许外键引用任何索引列或列组。但是,在引用的表中,必须有一个索引,其中引用的列被列为相同顺序的第一列。
您需要在INTERNAL_MEDICINE_ITEM_DEF
上创建一个以DIAGNOSE_ITEM
作为第一列的索引。 (无需为INTERNAL_MEDICINE_SUMMARY
更改任何内容,因为引用的列是该表的主键。)