【问题标题】:CREATE TABLE with foreign key fails with ORA-00905: missing keyword使用外键创建表失败并出现 ORA-00905:缺少关键字
【发布时间】:2019-09-21 18:10:02
【问题描述】:

每当我尝试引用外键时,我都会收到此错误(缺少关键字) 这是我的代码:

CREATE TABLE SP (
  S# CHAR(2) NOT NULL,
  P# CHAR(2) NOT NULL,
  QTY INTEGER,
  PRIMARY KEY (S#,P#),
  FOREIGN KEY (S#) REFERENCE Supplier(S#) ON DELETE CASCADE
);

【问题讨论】:

  • CHAR 列应该使用标准类型,VARCHAR2,或者甚至可能是INTEGER(尽管父表可能犯了同样的错误,因此也需要更改) .如果将 FK 声明为列的一部分而不是在末尾单独声明,则可以省略数据类型并让它从父级继承。

标签: oracle foreign-keys constraints ddl


【解决方案1】:

你的代码有几个问题:

  • 你的主键定义语法错误;应该是CONSTRAINT <constraint_name> PRIMARY KEY (S#, P#)

  • 在外键的定义中,关键字REFERENCES缺少最后的S

考虑:

CREATE TABLE SP (
  S# CHAR(2) NOT NULL,
  P# CHAR(2) NOT NULL,
  QTY INTEGER,
  CONSTRAINT SP_PK PRIMARY KEY (S#, P#),
  FOREIGN KEY (S#) REFERENCES Supplier(S#) ON DELETE CASCADE
);

Demo on DB Fiddle

提醒:请注意,主键引用的列必须是唯一的或者是被引用表中的主键(即列S#必须是表Supplier的主键或者有UNIQUE约束) .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 2023-01-02
    • 2016-07-25
    • 1970-01-01
    • 2019-01-18
    相关资源
    最近更新 更多