ORA-00001 在 UPDATE 语句中没有重复
ORA-00001 in UPDATE statement without duplicate
我无法理解基于 2 个字段的唯一约束的逻辑。
我有以下名为 DESCRIPTIONS
的 table,包括 3 列:ID_DESCRIPTION
、NAME
、ID_DESCRIPTION_TYPE
现在ID_DESCRIPTION
是primary 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 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)
的复合键只会破坏主键。
我无法理解基于 2 个字段的唯一约束的逻辑。
我有以下名为 DESCRIPTIONS
的 table,包括 3 列:ID_DESCRIPTION
、NAME
、ID_DESCRIPTION_TYPE
现在ID_DESCRIPTION
是primary 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 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)
的复合键只会破坏主键。