oracle 同时使用外键和主键

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/4535299/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-18 22:17:36  来源:igfitidea点击:

Foreign Keys and Primary Keys at the same time

sqloracleora-00907

提问by Bader

I am trying to create table (orderdetails2); the table has two FKs and a PKs on the two FK columns. Here is my code:

我正在尝试创建表(orderdetails2);该表在两个 FK 列上有两个 FK 和一个 PK。这是我的代码:

Version 1

版本 1

    create table OrderDetails2 (
PFOrder_ID Number(3)  FOREIGN KEY REFERENCES Orderr(Order_ID),
PFProduct_ID Number(3) FOREIGN KEY REFERENCES Product(Product_ID),
CONSTRAINT PF PRIMARY KEY (PFOrder_ID,PFProduct_ID),
CONSTRAINT FK_1 FOREIGN KEY (PFProudct_ID)
REFERENCES Product(Product_ID),
CONSTRAINT FK_2 FOREIGN KEY (PFOrder_ID)
REFERENCES Orderr(Order_ID),

Version 2

版本 2

            create table OrderDetails2 (
    PFOrder_ID Number(3)
    PFProduct_ID Number(3) 
    CONSTRAINT PF PRIMARY KEY (PFOrder_ID,PFProduct_ID),
    CONSTRAINT FK_1 FOREIGN KEY (PFProudct_ID) REFERENCES Product(Product_ID),
    CONSTRAINT FK_2 FOREIGN KEY (PFOrder_ID) REFERENCES Orderr(Order_ID)
);

I am using Oracle express. A problem pops when I run the code. Here it is (for version 1):

我正在使用 Oracle 快递。运行代码时出现问题。这是(对于版本 1):

ORA-00907: missing right parenthesis

What is the problem?

问题是什么?

采纳答案by Jonathan Leffler

Starting from the variant of the code with:

从代码的变体开始:

create table OrderDetails2 (
    PFOrder_ID Number(3)
    PFProduct_ID Number(3) 
    CONSTRAINT PF PRIMARY KEY (PFOrder_ID,PFProduct_ID),
    CONSTRAINT FK_1 FOREIGN KEY (PFProudct_ID) REFERENCES Product(Product_ID),
    CONSTRAINT FK_2 FOREIGN KEY (PFOrder_ID) REFERENCES Orderr(Order_ID)
);

You are missing a comma after PFOrder_ID NUMBER(3)and after PFPoduct_ID NUMBER(3).

在 之后PFOrder_ID NUMBER(3)和之后缺少逗号PFPoduct_ID NUMBER(3)

CREATE TABLE OrderDetails2
(
    PFOrder_ID   NUMBER(3),
    PFProduct_ID NUMBER(3), 
    CONSTRAINT PF   PRIMARY KEY (PFOrder_ID, PFProduct_ID),
    CONSTRAINT FK_1 FOREIGN KEY (PFProduct_ID) REFERENCES Product(Product_ID),
    CONSTRAINT FK_2 FOREIGN KEY (PFOrder_ID)   REFERENCES Orderr(Order_ID)
);

The PRIMARY KEY clause has to be separate from the PFProduct_ID column because it is a compound key. (Is Orderrspelled correctly?) And PFProudct_IDin the original is incorrect. If you're a programmer, you have to be able to spell consistently (even if not correctly in the broader sense of writing).

PRIMARY KEY 子句必须与 PFProduct_ID 列分开,因为它是一个复合键。(是否Orderr拼写正确?)而PFProudct_ID在原文中是不正确的。如果您是一名程序员,您必须能够始终如一地拼写(即使在更广泛的写作意义上不正确)。

回答by Mark Byers

Change the last comma to a close parenthesis: ).

将最后一个逗号更改为右括号:)

CREATE TABLE OrderDetails2
(
    ...,
    CONSTRAINT FK_2 FOREIGN KEY (PFOrder_ID) REFERENCES Orderr(Order_ID)
)