php - MySQL 和 UNIQUE 列 : how to avoid duplicates?

标签 php mysql sql database indexing

我有一个包含以下列的表格:

(id, col_1, col_2)

其中“id”是主键(自动增量)。

我想让 col_1col_2 成为“独特组合”。

例如,如果我插入数据...

(.., col_1, col_2 ) = (.., 'A', 'B') 

...接下来,我不应该被允许插入以下内容:

(.., col_1, col_2 ) = (.., 'A', 'B')
(.., col_1, col_2 ) = (.., 'B', 'A') #because it already exists, in another order:('A','B')   

我使用 UNIQUE(col_1, col_2) 成功阻止了第一个案例...

但是似乎“反向组合” (.., 'B', 'A') 是允许的

我怎样才能阻止这个?

最佳答案

尝试后,它确实不像创建另一个唯一索引那么容易。
这似乎是 MySQL 中的一个奇怪的缺陷。不过,解决方法可以是始终将较小的值存储在 col_1 中,将较大的值存储在 col_2 中(即当您不喜欢触发器时):

INSERT INTO your_table (col_1, col_2) VALUES (LEAST('A', 'B'), GREATEST('A', 'B'));

您可以找到这些函数的文档 here .

关于php - MySQL 和 UNIQUE 列 : how to avoid duplicates?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43094597/

相关文章:

javascript - 如何在codeigniter中的ajax之后仅加载指定的div

php - 用键内爆关联数组的最快方法

php - 在 jquery 和 php 中显示来自 dropmenu 的数据库的结果

php - 带有数据库值的 HTML 表格

sql - 如何忽略产品标题 ASP.NET/SQL 中的 "the"

SQL解码空值

php - Laravel:如何从结果访问表主键

mysql - Woocommerce - 扩展搜索不会返回多字段搜索,可能存在 SQL 问题。为什么?

php - 如何为这个 MAX 数字增值

sql - 在 PostgreSQL 中检索最近连续日期的记录