如何定义外键

时间:2018-04-23 07:21:13

标签: sql oracle

我的双父母表是艺术品。我按如下方式创建了他们的表:

create table person (
     person_id number(20) primary key,
     name varchar2(20),
     address varchar(50),
     contact_number number (10)
     );     

和其他

 create table artwork (
    artwork_id number primary key,
    barcode char (20),
    title varchar2(20),
    description varchar2(50));

当我尝试让子表投票时,它会发出此错误。

   create table vote 
    (
        vote_id number(7) NOT NULL,
        artwork_id number(20),
        person_id number(20),

        PRIMARY KEY (vote_id), 
        FOREIGN KEY (artwork_id) REFERENCES artwork(artwork_id), 
        FOREIGN KEY ( person_id) REFERENCES Person(person_id)
    );  
  

SP2-0734:未知命令开头" FOREIGN KE ..." - 其余的行被忽略。

2 个答案:

答案 0 :(得分:2)

您忘记在constraint之前提及foreign key

create table vote 
(
    vote_id number(7) NOT NULL,
    artwork_id number(20),
    person_id number(20),
    PRIMARY KEY (vote_id), 
    CONSTRAINT fk_artwork_id FOREIGN KEY (artwork_id) REFERENCES artwork(artwork_id), 
    CONSTRAINT fk_person_id FOREIGN KEY ( person_id) REFERENCES Person(person_id)
);  

<强>语法

  

使用CREATE TABLE语句创建外键的语法   是:

CREATE TABLE table_name
(
  column1 datatype null/not null,
  column2 datatype null/not null,
  ...

  CONSTRAINT fk_column
    FOREIGN KEY (column1, column2, ... column_n)
    REFERENCES parent_table (column1, column2, ... column_n)
);

<强>演示

  

http://sqlfiddle.com/#!4/3d141

<强>解释

默认情况下,SQL Plus不喜欢空白行。但是,我们可以轻松配置SQL Plus环境以忽略它们:

SQL>  set sqlblanklines on

我们也可以将设置放在我们的glogin.sql文件中(假设我们允许编辑它,但情况并非如此)。

答案 1 :(得分:1)

在创建投票表时,在定义约束之前删除该空行:

create table vote 
(
    vote_id number(7) NOT NULL,
    artwork_id number(20),
    person_id number(20),
    PRIMARY KEY (vote_id), 
    FOREIGN KEY (artwork_id) REFERENCES artwork(artwork_id), 
    FOREIGN KEY ( person_id) REFERENCES Person(person_id)
);

任何空白行都会阻止SQL * Plus接受输入行。

如果您希望它避免此次运行:

  set sqlblanklines on

在任何其他指示之前。