MySQL 检查一组属性的唯一性?

MySQL check for uniqueness of a set of attributes?

我想做的是,我需要执行唯一性验证。但是,我不是简单地检查 “数据库中是否已经存在名称 iggy?”。我需要检查一组属性的唯一性。

这就是我所说的检查一组属性的唯一性的意思。假设我需要检查列/属性的唯一性:typepartNumname。我需要检查一行的 typepartNumname 是否唯一。

  1. 如果我发现两行具有相同的 typename 但它们具有不同的 partNum,则它们被认为是唯一的。
  2. 如果我发现两行具有相同的 type 但它们具有不同的 namepartNum,则它们被认为是唯一的。
  3. 如果我找到具有相同 typenamepartNum 的两行,它们不是唯一的。
id type  partNum  name
-----------------------
1  A     partA    nameA  # assume this exists
2  A     partA    nameB  # unique
3  A     partB    nameA  # unique
4  B     partA    nameA  # unique
5  A     partA    nameA  # NOT unique b/c type, partNum, and name match with 1

什么是比较 typepartNumname 列的属性集的好策略/MySQL 代码?

DISTINCT方法:

SELECT DISTINCT 
         type, partNum, name
 FROM mytable;

GROUP BY方法:

SELECT type, partNum, name
 FROM mytable
GROUP BY type, partNum, name;

GROUP BYGROUP_CONCAT的做法,如果要查看id的列表是否具有相同的唯一性:

SELECT GROUP_CONCAT(id) AS ids, type, partNum, name
 FROM mytable
GROUP BY type, partNum, name;

Fiddle