【问题标题】:Check constraint without columns检查没有列的约束
【发布时间】:2013-01-23 05:44:30
【问题描述】:

今天我在其中一张表上发现了一个有趣的约束:

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

知道我们为什么需要这个吗?

【问题讨论】:

  • 我想不出有什么好的理由来限制。您的 DDL 版本是否受控?理想情况下,创建该约束的脚本会有注释。或者,您可以查看存储库历史记录,了解更改的人员、时间和原因(如果他们留下了有用的评论)。
  • 该命令可能是使用带有少量验证的查询从某些自定义数据字典自动生成的。或者——顾名思义——约束应该是某种模板。
  • 这是一个现实检查。当它失败时,我们知道世界已经结束。或者甲骨文有一个根本性的错误。这几乎是同一件事:)

标签: sql database oracle constraints check-constraints


【解决方案1】:

答案很简单。

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

我也在我自己的机器上尝试过,在 Oracle 自己的示例模式中的 emp 表上。完美运行。除了语法错误和其他约束的强制执行之外,没有什么是被禁止的。

【讨论】:

  • 正确。我只想补充一点,一个永远为真的约束永远不会是假的,而一个永远不会是假的约束不是——在逻辑意义上——一个约束。它在逻辑上是无效的,你不需要它。只需将其删除。
  • 是的,詹姆斯是对的。就像约束 C$T1_DUMMY 的名称一样 - 它只是一个虚拟约束。它可能是为了检查用户是否有权向表中添加约束而创建的。如果您不需要它,或者您在那里看到它不舒服,您可以将其移除。
猜你喜欢
  • 2012-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-13
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多