检查两个唯一值,sql

Posted

技术标签:

【中文标题】检查两个唯一值,sql【英文标题】:Check two unique values, sql 【发布时间】:2013-05-20 13:11:08 【问题描述】:

我有一个表,包含两列 AB 具有唯一值约束。 当用户在数据库中输入新值 A1B1 时,我想检查 A1 不存在于 A 列和 B1 也不存在于 B 列中。

--编辑

这两列在数据库中已经是唯一的。我想编写一个查询来搜索给定的值,如果返回值为 null,那么用户可以添加新值 A1B1。如果有匹配项,我会告诉用户他不能添加这些值。

【问题讨论】:

你的意思是column的两个值都不存在还是两者中的任何一个? @JW웃 这两个值必须是唯一的。 听起来您不知道您可以在 set 列上创建唯一约束。 这是 mysql 还是 SQL Server 还是其他? 你检查。它们不存在。你决定提交。与此同时,其他人添加了它们,因此唯一约束拒绝插入。由于您必须编写代码来处理这种情况无论如何,只需编写该代码即可。 【参考方案1】:

你想要哪一个?

    独立于其他列的唯一性 B 独立于其他列的唯一性 A 和 B 对是唯一的,独立于其他列

每个选项都需要一个唯一的约束(或索引)

    一个 B 两者(A,B)

所有 SQL 方言都允许您在约束中设置多个列

经典的 SQL 就是这样。我假设 A 和 B 在这里是 varchar

INSERT mytable (A, B)
SELECT 'A1', 'B1'
WHERE NOT EXISTS (SELECT * FROM mytable WHERE A= 'A1' AND B = 'B1')

这对于并发来说是不安全的,所以有更好的选择

对于 SQL Server 2008+,您有 MERGE statment 对于 MySQL,您有 INSERT IGNORE

另外,请注意,您通常不会先测试,向用户报告,允许写入。不能保证这些值可以在 SELECT 和以后的 INSERT 之间写入。

【讨论】:

这两列都有唯一的约束,我想编写一个查询来搜索给定的两个值并返回结果。如果我找到匹配项,则用户无法添加新数据。

以上是关于检查两个唯一值,sql的主要内容,如果未能解决你的问题,请参考以下文章

在 MSSQL 中更新之前检查是不是存在唯一值

获取 SQL 列的唯一值

Ruby:检查数组的唯一值并返回最小距离(haversine 公式)

oracle sql语句

主键约束,外键约束,空值约束,默认值约束,唯一约束,检查约束的各个作用是啥?

SQL如何按条件取唯一值?