实施'默认'只能在给定表中的单个行上设置的标志

时间:2015-11-16 21:28:47

标签: database oracle row default

如何实施'默认'只能在给定表中的单行上设置的标志?在数据库级别以及它可能是Oracle中的数据类型。

或者是否需要在应用程序中设置这样的条件,而不是在数据库级别?

1 个答案:

答案 0 :(得分:4)

您可以使用基于函数的唯一索引,例如:

create unique index uniq_default on your_table
  (case when default_flag = 'Y' then 'Y' else null end);

空值未被索引,因此case语句求值为单个值或null;因为它的唯一值只能出现一次。

SQL Fiddle demo在尝试插入标记设置为Y的第二行时显示错误。如果try to update为Y创建副本,则会发生同样的事情。

或者您可以使用具有相同逻辑和唯一约束的虚拟列,这是完全相同的。