当前位置: 首页 > 面试题库 >

两列组合的唯一约束?

夏志国
2023-03-14
问题内容

我一直在尝试找出是否有可能对两列的组合具有唯一约束。

具体来说,我有两列A和B。

我有下面这样的行

A     B
1     2

然后我希望以下组合在插入时失败

A     B
1     2
2     1

我尝试添加一个简单的约束

ALTER TABLE test ADD CONSTRAINT test_constraint UNIQUE (a, b);

但这让我(2, 1)(1, 2)已经存在时插入。

这可能吗?还是在插入之前必须检查组合是否存在?


问题答案:

您可以使用表达式的索引来执行此操作:

create unique index unq_test_a_b on (test(least(a, b), greatest(a, b));

我不认为unique约束允许表达式(并且现在没有方便的Postgres进行测试),但这本质上是同一回事。



 类似资料:
  • 我有一张桌子,不知怎的,同一个人进了我的桌子两次。现在,主键只是一个自动编号,但还有两个字段存在,我想强制它们是唯一的。 例如,这些字段是: 我只想要一张带有唯一PersonNumber和Active=1的唱片 (因此这两个字段的组合必须是唯一的) SQL server中现有表的最佳方式是什么?我可以这样做,如果其他任何人使用与现有值相同的值进行插入,则插入失败,因此我不必在应用程序代码中担心这一

  • 问题内容: 我有三张桌子- 我想确保当它们自然连接时,product_id +文件名是唯一的。到目前为止,我拥有的最佳解决方案是将文件名添加到product_attachment表中,但是我想知道是否有避免这种情况的方法。 问题答案: 如果文件名列不是唯一的,则可以在表上添加自定义约束。请注意,这将在每次插入和更新时执行以下查询,这并不是理想的性能。

  • 问题内容: 我想在我的MySQL表上添加一个唯一性约束。该表包含四列: 此约束必须检查对于new行,new和都未包含在或中。 例子 : 有没有办法定义这样的约束? 问题答案: 您可以通过触发器来做到这一点 注意: 由于您使用的MySQL版本缺少技巧,因此当找到具有相同地址的行时,违反对其中一列的约束。 这是 SQLFiddle 演示。取消注释最后一个插入语句之一,然后单击确定。这些插入不会成功。

  • 我有下表: 我希望KEY_1和KEY_2的组合是唯一的,反之亦然。 这样,我可以使KEY_1和KEY_2之间的组合唯一,但我也希望相反。 示例: 我无法再次插入此值,反之亦然。 这应该是无效的(因为它是同一对密钥): 谢啦

  • 问题内容: 我有一个带有4列的表格 每列将是A,B,C,D 列A是主键。列B具有唯一的名称约束。 现在,我想删除列B的唯一约束,并通过组合列B,C和D给出唯一约束。因此,该表将只允许一行包含列B,C和D中的特定值。 如何给这种约束? 我尝试给复合唯一密钥,例如: 但这是在检查是否存在任何约束,而不是在检查唯一键约束的组合。 问题答案: 在这些列上创建唯一键 Oracle / PLSQL:唯一约束

  • 问题内容: 我正在将SEAM 2 / Hibernate与PostgreSQL 9数据库一起使用。我有下表 我想添加一个约束,以确保每个新条目都具有active_band_user和active_band_date的唯一组合。 每秒可能有许多次尝试插入,因此我需要尽可能地提高效率,是否可以在实体映射中使用SEAM /hibernate注释? 提前致谢 问题答案: 没有Hibernate注释在插入/