当它基于2个字段时,我无法理解唯一约束的逻辑。
我有以下名为DESCRIPTIONS
的表,包括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
,因此查询结果
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个结果,我要更新的结果。 我在这里没有理解的是什么?
答案 0 :(得分:1)
我猜测uk_description
实际上是基于NAME单列的唯一键。
“遗憾的是没有。”
好的,另一种解释是它是一个多列密钥,基于与您的想法不同的列集。 (NAME, ID_DESCRIPTION_TYPE)
也适合所描述的行为。
公平地说,(NAME, ID_DESCRIPTION_TYPE)
上的唯一键更有意义。例如,当表是单个参考数据查找时,这是您想要的密钥(这是一个可怕的模型但很常见)。而ID_DESCRIPTION, NAME)
的复合键只会破坏主键。