我有一个表(T1)并且在该表上有一些记录。我想为一列(c1)创建外键约束,但我想忽略现有记录的约束(旧记录)。我的意思是FK约束应适用于新记录。
有可能吗?
答案 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优化器在制定决策时不能使用约束。因此,在添加经过验证的约束之前,最好在可能的情况下修复现有数据。