UPDATE语句中的ORA-00001没有重复

时间:2017-12-15 07:59:44

标签: oracle unique-constraint

当它基于2个字段时,我无法理解唯一约束的逻辑。

我有以下名为DESCRIPTIONS的表,包括3列:ID_DESCRIPTIONNAMEID_DESCRIPTION_TYPE

现在ID_DESCRIPTIONprimary key,并且unique constraint UK_DESCRIPTION ID_DESCRIPTION上有NAME UPDATE DESCRIPTIONS SET NAME = 'USA' WHERE ID_DESCRIPTION = 9255813

如果我尝试运行以下查询:

ORA-00001

我收到UK_DESCRIPTION个例外,说明违反了唯一约束9255813

现在这意味着这对情侣('USA'ID_DESCRIPTION)已经存在了吗? 但是,由于primary keySELECT * FROM DESCRIPTIONS WHERE ID_DESCRIPTION = 9255813 ,因此查询结果

,因此我看不出这是怎么回事。
var from =  "11:15 AM";
var to = "10:15 AM";

if (moment(from, 'hh:mm a') > moment(to, 'hh:mm a')) {
  alert("Invalid Date Range");
} else {
  alert("Valid Date Range");
}

只返回1个结果,我要更新的结果。 我在这里没有理解的是什么?

Constraint snapshot from toad

1 个答案:

答案 0 :(得分:1)

我猜测uk_description实际上是基于NAME单列的唯一键。

  

“遗憾的是没有。”

好的,另一种解释是它是一个多列密钥,基于与您的想法不同的列集。 (NAME, ID_DESCRIPTION_TYPE)也适合所描述的行为。

公平地说,(NAME, ID_DESCRIPTION_TYPE)上的唯一键更有意义。例如,当表是单个参考数据查找时,这是您想要的密钥(这是一个可怕的模型但很常见)。而ID_DESCRIPTION, NAME)的复合键只会破坏主键。