【问题标题】:Creating a foreign key constraint with Oracle使用 Oracle 创建外键约束
【发布时间】:2019-01-13 10:30:55
【问题描述】:

我正在尝试在表 mail.id 到表 disposition.mailid 之间创建一个约束,这是我的语法

alter table disposition add foreign key (mailid) references mail(id) on cascade delete;

问题是我收到此错误

alter table disposition add foreign key (mailid) references mail(id) on cascade delete
ORA-00905: missing keyword

Time: 0,002s

或者有什么简单的方法可以在navicat上的两个表之间进行约束?

【问题讨论】:

  • on delete cascade 不是on cascade delete

标签: oracle foreign-keys ddl


【解决方案1】:

解决方案:{1} 使用关键字 CONSTRAINT,{2} 为约束命名,{3} 写入:ON DELETE CASCADE。示例(Oracle 12c):

create table mail ( id number primary key ) ;
-- Table MAIL created.

create table disposition ( id number primary key, mailid number ) ;
-- Table DISPOSITION created.

alter table disposition 
add constraint disposition_fk 
foreign key (mailid) references mail(id) on delete cascade ;
-- Table DISPOSITION altered.

测试

-- table MAIL: insert 5 ids 
insert into mail ( id )
select level from dual connect by level <= 5 ;

-- table DISPOSITION: mail ids 1-5 okay, 6 etc not accepted
begin
  insert into disposition ( id, mailid ) values ( 101, 1 ) ;
  insert into disposition ( id, mailid ) values ( 102, 2 ) ;
  insert into disposition ( id, mailid ) values ( 103, 3 ) ;
  insert into disposition ( id, mailid ) values ( 104, 4 ) ;
  insert into disposition ( id, mailid ) values ( 105, 5 ) ;
end ;
/
-- PL/SQL procedure successfully completed.

insert into disposition ( id, mailid ) values ( 106, 6 ) ;
-- ORA-02291: integrity constraint (...DISPOSITION_FK) violated - parent key not found

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 2013-05-04
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    相关资源
    最近更新 更多