我正在尝试在表mail.id与表disposition.mailid之间创建约束,这是我的语法
right(shamsiDate, 2)
问题是出现此错误
alter table disposition add foreign key (mailid) references mail(id) on cascade delete;
还是在navicat的两个表之间建立约束的简单方法?
答案 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