And*_*eou 1 sql oracle null constraints foreign-keys
我正在尝试向要修改的数据库表添加约束。我想在列上添加约束,以便它引用另一个表的主键。很简单,我只需要添加一个外键约束。问题是该列已经有一些空值或者不属于我将引用的表的一部分。
我的问题是如何添加引用主键但也可以接受空值(主键始终有值)的约束以及如何忽略迄今为止的现有值。是否可以?如果第二部分不是,我想我总是可以编写一个脚本来将所有无意义值(它们有一种格式,如果我可以 reg ex)更新为 null,所以我唯一需要弄清楚的是如何添加也接受空值的外键约束
首先,没有什么可以阻止您在具有 NULL 的列上添加引用约束 - 外键约束仅针对非 NULL 值强制执行。
其次,如果父表中不存在现有值,并且您无法修复它们,那么您可以在 Oracle 中选择使约束仅对新插入或更新的行进行验证,使用以下选项,NOVALIDATE例如
ALTER TABLE x ADD CONSTRAINT fk FOREIGN KEY (id) REFERENCES parent (id) NOVALIDATE;
Run Code Online (Sandbox Code Playgroud)
使用该NOVALIDATE选项的唯一缺点是查询优化器不会依赖 FK 约束,并且会假设可能存在没有匹配父行的行来执行查询。
如果您能够修复缺失值,然后将约束更改为 ,这将是一个好主意VALIDATE。
| 归档时间: |
|
| 查看次数: |
6685 次 |
| 最近记录: |