Oracle SQL创建WRITTEN_BY表时提示外键对应主键不存在问题
问题原因
- 外键与引用主键结构不匹配:AUTHOR表的主键是
NAME、ADDRESS两个字段组成的联合主键,不是两个独立的单字段主键。你现有代码中分别创建两个独立外键单独关联NAME、ADDRESS,Oracle无法找到对应单字段的主键约束,因此触发「不存在对应主键」报错。 - 查询结果误解:你之前查询主键信息时看到NAME和ADDRESS都有对应主键条目,是因为联合主键的每个组成字段都会在查询结果中单独展示一条记录,并不代表两个字段各自是独立主键。
解决方法
修改WRITTEN_BY表的外键定义,将关联AUTHOR的两个字段合并为一个外键,匹配AUTHOR的联合主键结构即可,修改后的建表代码如下:
CREATE TABLE WRITTEN_BY ( NAME VARCHAR2(20), ADDRESS VARCHAR2(30), ISBN VARCHAR2(30), -- 单个外键关联AUTHOR的联合主键 CONSTRAINT WB_FK_AUTHOR FOREIGN KEY(NAME, ADDRESS) REFERENCES AUTHOR(NAME, ADDRESS), CONSTRAINT WB_FK_BOOK FOREIGN KEY(ISBN) REFERENCES BOOK(ISBN) );
补充验证:需要确认BOOK表的
ISBN是单字段主键,避免关联BOOK的外键触发同类报错。
内容的提问来源于stack exchange,提问作者tryingDev
相关产品推荐
相关产品推荐

