如何为 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 中的列组合赋予唯一约束?的主要内容,如果未能解决你的问题,请参考以下文章