使用Oracle创建外键约束

时间:2019-01-13 10:30:55

标签: oracle foreign-keys ddl

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

right(shamsiDate, 2)

问题是出现此错误

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

还是在navicat的两个表之间建立约束的简单方法?

1 个答案:

答案 0 :(得分:0)

解决方案:{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