当前位置: 首页 > 面试题库 >

如何在可能具有空值的字段上创建唯一索引(Oracle 11g)?

东郭良弼
2023-03-14
问题内容

这是具有3列(ID,UNIQUE_VALUE,UNIQUE_GROUP_ID)的示例表

我希望下面的记录可以被允许:

(1, NULL, NULL)
(2, NULL, NULL)

或者

(3, NULL, 7)
(4, 123, 7)

或( 注:这种情况是不允许的unique index,也不unique constraint

(5, NULL, 7)
(6, NULL, 7)

并且这些是不允许的:

(7, 123, 7)
(8, 123, 7)

我在最后2列上创建了唯一索引,但是仅允许前2个示例。

仅当两者都不为null时,才可以让db检查这两列的唯一性吗?


问题答案:

您只想对UNIQUE_VALUEUNIQUE_GROUP_ID都不为空的行实施唯一性。为此,您可以使用基于函数的唯一索引:

CREATE UNIQUE INDEX func_based_index ON the_table
  (CASE WHEN unique_value IS NOT NULL
         AND unique_group_id IS NOT NULL
        THEN UNIQUE_VALUE || ',' || UNIQUE_GROUP_ID
   END);


 类似资料:
  • 问题内容: 我正在尝试在表中的两个字段上创建唯一约束。但是,很可能一个人将为空。我只要求如果它们都不为null(永远不会为null),则它们必须是唯一的。 忽略表和字段名称的语义以及这是否有意义-我刚刚做了一些补充。 有没有一种方法可以在这些字段上创建唯一约束,从而对两个非null值强制执行唯一性,但是如果有多个条目(非null和null),则可以忽略呢? 这个问题是针对SQL Server的,我

  • 问题内容: 不知道在PostgreSQL 9.3+中是否可行,但是我想在非唯一列上创建唯一索引。对于像这样的表: 我想仅能[快速]查询不同的日子。我知道我可以用来帮助执行不同的搜索,但是如果不同值的数量大大少于索引覆盖的行数,这似乎会增加额外的开销。就我而言,大约30天中有1天与众不同。 我是创建关系表以仅跟踪唯一条目的唯一选择吗?思维: 并在每次插入数据时使用触发器来更新它。 问题答案: 索引只

  • 如何将(upsert和delete孤立行)合并到? : 这里有一把小提琴:https://rextester.com/quvc30763 我想先用下面的代码删除孤立行: 然后用这个Ussert: null

  • CreateIndexes 根据struct中的tag来创建索引 CreateUniques 根据struct中的tag来创建唯一索引

  • 问题内容: 我有一个名为的表,我想对它们进行排序,以表最填写的顺序。每个列都是JSONB列或TEXT列。我并不需要很确定,因此通常我按以下顺序订购: 但是,这很慢,因此我想创建一个索引。但是,这不起作用: 也没有 不能说我很惊讶。声明此索引的正确方法是什么? 问题答案: 要测量文本表示形式中行的大小,您可以将整个行都转换为文本,这比连接单个列要快得多: 但是索引中的此表达式存在3(或4)个问题:

  • 我试图在我们的COSMOSDB上的一些集合上创建一个唯一的索引。每个MS文档https://docs.microsoft.com/en-us/azure/cosmos-db/mongoDB-indexing:只有当集合为空(不包含任何文档)时,才能创建唯一索引。 因此,我清理了集合上的所有数据,但遇到错误时,消息是: 你知道为什么我会出错吗? 谢谢,