2013-02-07 51 views
4

今天,我发现在桌子上的一个有趣的约束:检查约束

alter table T1 add constraint C$T1_DUMMY check (null is null); 

任何想法,为什么我们需要这个?

+0

我想不出有任何理由有这个约束。您的DDL版本是否受到控制?理想情况下,创建该约束的脚本将会有注释。或者您可以查看存储库历史记录,查看谁进行了更改,何时以及为什么(如果他们留下了有用的评论)。 –

+1

该命令可能已使用含有微弱验证的查询从某些自定义数据字典中自动生成。或者 - 正如其名称所暗示的 - 约束被认为是某种模板。 – collapsar

+3

这是一个现实检查。当它失败时,我们知道世界已经结束。或者Oracle有一个基本的错误。这几乎相同的东西:) –

回答

0

答案很简单。

条件null is null将始终返回true。因此,CHECK语句总是返回true,因此不会强制执行任何其他业务逻辑。很可能这就是为什么约束被命名为C$T1_DUMMY

我也在我自己的机器上,在emp表上使用了Oracle自己的示例模式。完美的作品。除了语法错误和其他约束的强制执行之外,什么都不会被禁止。

+1

正确。我只会添加一个始终为真的约束永远不会是错误的,并且从不假的约束不是 - 在逻辑意义上 - 约束。这在逻辑上是无效的,你不需要它。只要删除它。 –

+0

是的,詹姆斯是对的。和约束“C $ T1_DUMMY”的名称一样 - 它只是一个虚拟约束。它可能是为了检查用户是否有权限向表中添加约束而创建的。如果你不需要它,你可以将其删除,或者在那里看到它不舒服。 – Rachcha