【问题标题】:How to define a foreign key如何定义外键
【发布时间】:2018-04-23 07:21:13
【问题描述】:

我的两个父母表是personartwork。我按如下方式创建了他们的表:

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...”开头的未知命令 - 忽略行的其余部分。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    你忘了在foreign key之前提到constraint

    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

    说明

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

    SQL>  set sqlblanklines on
    

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

    【讨论】:

    • SP2-0734:以“CONSTRAINT...”开头的未知命令 - 忽略行的其余部分。
    • 首先运行set sqlblanklines on 命令,然后尝试@agam2104
    • 运行上面的create table vote 查询一个是正确的代码
    • 添加说明@agam2104
    【解决方案2】:

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

    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
    

    在任何其他指令之前。

    【讨论】:

    • 只是想用我的表格艺术品询问另一个查询我想将 artist_id 添加为 FK。 create table artwork ( artwork_id number primary key, barcode char (20), title varchar2(20), description varchar2(50), artist_id varchar2(10), FOREIGN KEY (artist_id) REFERENCES artist(artist_id) ); ** 第 7 行出现错误:ORA-02267:列类型与引用的列类型不兼容** 现已解决,我在另一个表的 artis_id 中使用了 diff 数据类型。
    猜你喜欢
    • 2010-11-14
    • 1970-01-01
    • 2019-04-22
    • 2016-10-04
    • 2010-11-16
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多