【问题标题】:Create table field with foreign key constraint创建具有外键约束的表字段
【发布时间】:2019-07-12 16:03:49
【问题描述】:

我要建表department:

COLUMN NAME   DATATYPE    SIZE   CONSTRAINT

dept_id       number      4      Primary key
prod_id       number      4      Foreign key

我试过了:

CREATE TABLE Department(
dept_id number(4) primary key,
prod_id number(4) foreign key);

显示错误。如何向该表添加外键约束?

【问题讨论】:

    标签: oracle foreign-keys relational-database


    【解决方案1】:

    外键使用主键定义表 DEPARTMENT 和另一个表之间的关系。这意味着,您不能在 DEPARTMENT 中创建 PROD_ID 为 1234 的行,除非指定的父表中有一个预先存在的行,其值为 1234 作为其主键。

    那么你有这样一个现有的父表吗?如果是这样,您需要在外键定义中包含其名称。否则你必须创建它。

    假设父表是 PRODUCT:

    create table product (
        prod_id number(4) primary key
        , name varchar2(32) not null 
    );
    

    然后您可以使用这样的外键创建 DEPARTMENT:

    CREATE TABLE Department(
        dept_id number(4) primary key,
        prod_id references PRODUCT );
    

    是的,这就是您需要的所有语法:它会自动创建一个 PROD_ID 列,其数据类型和精度与引用表的主键列相同。可以使用更详细的语法。阅读 Oracle SQL 文档至find out more。

    【讨论】:

      【解决方案2】:

      我假设另一个表名为 other_table_name,并且它包含一个名为 prod_id 的主键。

      CREATE Department (
      dept_id number(4) primary key,
      prod_id number(4) REFERENCES other_table_name (prod_id)
      );
      

      或不同的语法

      CREATE Department (
      dept_id number(4) primary key,
      prod_id number(4)
      
      ...
      CONSTRAINT fk_prod_id
        FOREIGN KEY (prod_id)
        REFERENCES other_table_name (prod_id)
      );
      

      【讨论】:

      • 您需要用实际引用的表代替@Ely 的示例other_table_name。
      • @diya 当然,您必须确保在创建实际引用之前创建引用的表和列。我认为这很清楚(如果您考虑一下,这是有道理的)。
      猜你喜欢
      • 2023-04-09
      • 2018-05-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多