创建外键约束时,需要列名吗?

zur*_*lav 3 sql database oracle

假设我们有两个通过以下脚本创建的表:

create table CAR (
    CAR_ID number(19,0),
    NAME varchar2(255 char),
    primary key (CAR_ID)
);
create table CAR_WHEEL (
    CAR_WHEEL_ID number(19,0),
    CAR_REF_ID number(19,0),
    WHEEL_COLOR varchar2(255 char),
    primary key (CAR_WHEEL_ID)
);
Run Code Online (Sandbox Code Playgroud)

现在我想添加一个约束,因此我可以创建以下语句:

alter table CAR_WHEEL
    add constraint FK_CAR 
    foreign key (CAR_REF_ID) 
    references CAR (CAR_ID);
Run Code Online (Sandbox Code Playgroud)

但我也看到了脚本,最后一行会有references CAR;,而不是references CAR (CAR_ID);

有什么区别以及何时应该添加列名称?CAR如果表的主键包含更多列,例如,会有任何变化吗primary key (CAR_ID, NAME)

如果答案取决于 SQL 方言,那么我对 Oracle 特别感兴趣。

dim*_*hev 5

没有特定列的外键将在主键上创建它,因此对于不同的主键,您需要添加其中的所有列。我不建议使用隐式外键创建。

  • 另一方面,我*会*建议始终使用主键作为外键引用。 (2认同)