【问题标题】:How to give a unique constraint to a combination of columns in Oracle?如何为 Oracle 中的列组合赋予唯一约束?
【发布时间】:2023-04-10 11:38:01
【问题描述】:

我有一个有 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 查看此链接stackoverflow.com/questions/1109614/…

标签: sql oracle constraints unique-constraint composite-key


【解决方案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.

【解决方案3】:

ALTER TABLE table_name DROP CONSTRAINT constraint_name;

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

【讨论】:

    猜你喜欢
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多