简体   繁体   English

外键不存在错误? 甲骨文SQL

[英]Foreign key does not exist error? Oracle SQL

I'm creating a database and making some tables.我正在创建一个数据库并制作一些表格。

I have a table 'written_by' which references table 'author' and 'book' the creating code is as below.我有一个表“written_by”,它引用表“作者”和“书”,创建代码如下。

CREATE TABLE WRITTEN_BY (
  NAME VARCHAR2(20),
  ADDRESS VARCHAR2(30),
  ISBN VARCHAR2(30),
  CONSTRAINT WB_FK FOREIGN KEY(NAME)
  REFERENCES AUTHOR(NAME),
  CONSTRAINT WB_FK2 FOREIGN KEY(ADDRESS)
  REFERENCES AUTHOR(ADDRESS),
  CONSTRAINT WB_FK3 FOREIGN KEY(ISBN)
  REFERENCES BOOK(ISBN)
);

When the code is executed, the script returns 'no primary key existing', but as searched by执行代码时,脚本返回“没有主键存在”,但通过搜索

SELECT cols.table_name, cols.column_name, cols.position, cons.status, cons.owner
FROM all_constraints cons, all_cons_columns cols
WHERE cons.constraint_type = 'P'
AND cons.constraint_name = cols.constraint_name
AND cons.owner = cols.owner
ORDER BY cols.table_name, cols.position;

There are primary key 'name', 'address', and 'ISBN'.有主键“名称”、“地址”和“ISBN”。

*edit Here's the 'author' table creating code. *edit 这是“作者”表创建代码。

CREATE TABLE AUTHOR (
  NAME VARCHAR2(20),
  ADDRESS VARCHAR2(30),
  URL VARCHAR2(100),
  CONSTRAINT A_PK PRIMARY KEY(NAME, ADDRESS)
);

You want to use the composite key:您要使用复合键:

CREATE TABLE WRITTEN_BY (
  NAME VARCHAR2(20),
  ADDRESS VARCHAR2(30),
  ISBN VARCHAR2(30),
  CONSTRAINT WB_FK FOREIGN KEY(NAME, ADDRESS)
  REFERENCES AUTHOR(NAME, ADDRESS),
  CONSTRAINT WB_FK3 FOREIGN KEY(ISBN)
  REFERENCES BOOK(ISBN)
);

db<>fiddle here db<> 在这里小提琴

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM