Oracle 约束和空值
Oracle Constraint and null values
在 Oracle DB 上,如果我有一个 Nullable 列和同一列上的检查约束将值限制为 'ABC' 或 'DEF',我可以插入一行该列中的空值(假设空值不是约束值之一)?
您可以阅读 Oracle Concepts manual 中的检查(和其他)约束。
在您的情况下,是的,您可以插入具有空值的行,因为检查约束(例如,当 mycolumn 为空时,mycolumn in ('ABC', 'DEF')
变为有效 NULL in ('ABC', 'DEF')
。此布尔表达式本身的计算结果为空,就像 null = 'ABC'
所做的那样,因为 null 是 "unknown"。并且只有当它们的计算结果为 false
时才会违反检查约束。因此,您的约束允许您插入 'ABC'、'DEF' 或 null 到列中。
can I insert a row with a null value in that column
可以,因为您已将列定义为可为空。如果您向列提供 non-null 值,则提供的值必须与 CHECK
约束中定义的值匹配。
在 Oracle DB 上,如果我有一个 Nullable 列和同一列上的检查约束将值限制为 'ABC' 或 'DEF',我可以插入一行该列中的空值(假设空值不是约束值之一)?
您可以阅读 Oracle Concepts manual 中的检查(和其他)约束。
在您的情况下,是的,您可以插入具有空值的行,因为检查约束(例如,当 mycolumn 为空时,mycolumn in ('ABC', 'DEF')
变为有效 NULL in ('ABC', 'DEF')
。此布尔表达式本身的计算结果为空,就像 null = 'ABC'
所做的那样,因为 null 是 "unknown"。并且只有当它们的计算结果为 false
时才会违反检查约束。因此,您的约束允许您插入 'ABC'、'DEF' 或 null 到列中。
can I insert a row with a null value in that column
可以,因为您已将列定义为可为空。如果您向列提供 non-null 值,则提供的值必须与 CHECK
约束中定义的值匹配。