【问题标题】:Oracle Constraint and null valuesOracle 约束和空值
【发布时间】:2016-01-04 11:27:39
【问题描述】:

在 Oracle DB 上,如果我有一个 Nullable 列和同一列上的检查约束,将值限制为“ABC”或“DEF”,我可以在该列中插入一个具有空值的行(鉴于 null 不是约束值之一)?

【问题讨论】:

  • 是的,Oracle 将强制执行所有启用的限制。能否分享一下约束代码,让问题得到解答?
  • 你为什么这么问?试试看! sqlfiddle.com

标签: oracle check-constraints


【解决方案1】:

您可以阅读Oracle Concepts manual 中的检查(和其他)约束。

在您的情况下,是的,您可以插入具有空值的行,因为检查约束(例如,当 mycolumn 为空时,mycolumn in ('ABC', 'DEF') 变为有效的 NULL in ('ABC', 'DEF')。这个布尔表达式本身将评估为空,就像 null = 'ABC'确实如此,因为 null 是“未知的”。并且仅当它们评估为 false 时才违反检查约束。因此,您的约束允许您在列中插入 'ABC'、'DEF' 或 null。

【讨论】:

    【解决方案2】:

    我可以在该列中插入具有空值的行吗

    是的,您可以,因为您已将列定义为可为空。如果为列提供非空值,则提供的值必须与CHECK 约束中定义的值匹配。

    See a live demo here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 2021-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多