当它基于两个字段时,我无法理解唯一约束的逻辑。
下面的表名为DESCRIPTIONS,包括3列:ID_DESCRIPTION、NAME、ID_DESCRIPTION_TYPE
现在,ID_DESCRIPTION是primary key,并且有一个unique constraint UK_DESCRIPTION on耦合(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只返回1结果,这是我想更新的结果。我在这里不懂什么?

发布于 2017-12-15 08:35:59
我将猜测uk_description实际上是一个基于名称的单一列的唯一键。
“不幸的是,事实并非如此。”
好的,另一种解释是,它是一个多列键,它基于与您所想不同的一组列。(NAME, ID_DESCRIPTION_TYPE)也符合所描述的行为。
公平地说,在(NAME, ID_DESCRIPTION_TYPE)上使用一个独特的键更有意义。例如,当表是单个引用数据查找时(这是一个可怕的模型,但足够常见),这就是您想要的关键。而ID_DESCRIPTION, NAME)的复合键只会破坏主键。
https://stackoverflow.com/questions/47828056
复制相似问题