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

ORA-00001 in UPDATE statement without duplicate

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

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

现在ID_DESCRIPTIONprimary key,还有一对unique constraintUK_DESCRIPTION情侣(ID_DESCRIPTIONNAME)。

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

UPDATE DESCRIPTIONS SET NAME = 'USA' WHERE ID_DESCRIPTION = 9255813

我收到一个 ORA-00001 异常,说违反了唯一约束 UK_DESCRIPTION

现在这意味着这对夫妇 (9255813,'USA') 已经存在对吗? 但是,我不明白这是怎么可能的,因为 ID_DESCRIPTION 是一个 primary key,因此是唯一的,而且查询结果是

SELECT * FROM  DESCRIPTIONS  WHERE ID_DESCRIPTION = 9255813

只有return1个结果,我要更新的那个。 我在这里不明白什么?

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

"It is unfortunately not."

好吧,另一种解释是,它是基于与你想象的不同的一组列的多列键。 (NAME, ID_DESCRIPTION_TYPE) 也符合所描述的行为。

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