如何为新数据设置外键约束

时间:2014-05-02 14:02:38

标签: oracle

我有一个表(T1)并且在该表上有一些记录。我想为一列(c1)创建外键约束,但我想忽略现有记录的约束(旧记录)。我的意思是FK约束应适用于新记录。

有可能吗?

2 个答案:

答案 0 :(得分:1)

SebastianH的解决方案很好。 如果你不能创建表的另一个解决方案是使用触发器完成工作。 此解决方案的问题是前导表的删除行问题。 它可以处理另一个触发器。

答案 1 :(得分:1)

您可以在Oracle中创建约束,忽略任何预先存在的错误数据,但使用NOVALIDATE关键字强制执行任何插入或更新,例如:

create table t1 (id number primary key);

create table t2 (id2 number primary key, id number not null);

insert into t2 values (1,1);

alter table t2 add constraint t2_fk
  foreign key (id)
  references t1 (id)
  novalidate;

insert into t2 values (2,2);

ORA-02291: integrity constraint (SCOTT.T2_FK) violated - parent key not found

唯一的缺点是Oracle优化器在制定决策时不能使用约束。因此,在添加经过验证的约束之前,最好在可能的情况下修复现有数据。