如何为 Oracle 中的列组合赋予唯一约束?

Posted

技术标签:

【中文标题】如何为 Oracle 中的列组合赋予唯一约束?【英文标题】:How to give a unique constraint to a combination of columns in Oracle? 【发布时间】:2013-06-24 23:25:39 【问题描述】:

我有一个有 4 列的表格

每列将是 A、B、C、D

A 列是主键。 B 列具有唯一名称约束。

现在我想删除 B 列的唯一约束,并通过组合 B、C 和 D 列来给出唯一约束。因此该表将只允许 B、C 和 D 列中具有特定值的一行。

我怎样才能给出这种类型的约束?

我尝试给出复合唯一键,例如:

ALTER TABLE TABLENAME ADD CONSTRAINT CONSTRAINT_NAME UNIQUE (COLUMN_B, COLUMN_C, COLUMN_D)

但它是检查是否存在任何一个约束,而不是检查唯一键约束的组合。

【问题讨论】:

@Naveen 我给了你所说的约束.. 但似乎约束只检查任何一个列名......我希望它就像一个新行不会被允许输入表中已经存在的所有三列值。 hai @nigelthomas 查看此链接***.com/questions/1109614/… 【参考方案1】:

在这些列上创建唯一键

ALTER TABLE YourTable
  add CONSTRAINT YourTable_unique UNIQUE (B, C, D);

Oracle/PLSQL: Unique Constraints

【讨论】:

什么是命名约定?如果表中有两个不相关的唯一值怎么办?那么 'YourTable_unique' 将是相同的名称。 @PhilipRego,您的评论是对的。命名约定由团队、公司、用户决定。这只是一个例子。 我很抱歉,但我没有看到 OP 的 alter query 和 query 在这个答案中的区别。我错过了什么吗? @whatever,问题后来被编辑,其中包括我给出的答案。【参考方案2】:

首先,您应该使用下面的 ALTER Query 删除现有的约束。

ALTER TABLE table_name
   DROP CONSTRAINT myUniqueConstraint;

现在,您可以使用关键字 UNIQUE 和所需列的组合来创建 UNIQUE 约束。

例如:

ALTER TABLE table_name
   ADD CONSTRAINT myUniqueConstraint UNIQUE(B, C, D);

Detailed explanation of UNIQUE Constraint here.

【讨论】:

***.com/questions/1109614/…【参考方案3】:

ALTER TABLE table_name DROP CONSTRAINT constraint_name;

在表名上创建唯一索引约束名 (B,C,D)

【讨论】:

以上是关于如何为 Oracle 中的列组合赋予唯一约束?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Cosmos DB 集合中的列创建唯一键?

如何为 MySQL 中的多个列指定唯一约束?

如何为R中的重复值分配唯一的等级编号

如何为数据库中的列生成唯一字符串?

如果没有插入值,如何为 SQL Server 中的列字段分配唯一值?

如何为 postgresql 中的唯一(不包括顺序)JSONB 列创建约束