MySQL 为特定列插入唯一 ID

MySQL insert an unique ID for specific columns

在 MySQL 5.5 和 5.7 中,如果 table 有 4 列,"a,b,c,d"

a,b,c,d
1,1,0,0
1,1,0,1
1,2,0,1
1,3,0,1

我们是否可以根据现有 table 中列 a 和 b 的每个唯一组合添加另一个唯一的 "ID" 列(int 或 bigint)?例如:

ID,a,b,c,d
1,1,1,0,0
1,1,1,0,1
2,1,2,0,1
3,1,3,0,1

此外,假设列 b 现在是一个字符串:

ID,a,b,c,d
1,1,Joe,0,0
1,1,Joe,0,1
2,1,Peter,0,1
3,1,Jan,0,1

我试过 AUTO_INCREMENT & UNIQUE,但似乎在这里不起作用,除非我遗漏了什么。有上师能开导吗?谢谢!

编写一个查询,为 ab 的每个组合分配一个递增的数字,然后在 UPDATE 查询中将其与原始 table 连接起来。

UPDATE yourTable AS t1
JOIN (SELECT a, b, @counter := counter + 1 AS id
      FROM (SELECT DISTINCT a, b FROM yourTable ORDER BY a, b) AS x
      CROSS JOIN (SELECT @counter := 0) AS var) AS t2
ON t1.a = t2.a AND t1.b = t2.b
SET t1.id = t2.id

中巴卡!

您可以使用 CONCAT 和 LPAD 函数合并列 a 和 b。

LPAD 对于避免以下冲突很重要:

CONCAT('1','10') = '110'
CONCAT('11','0' = '110'



SELECT CAST(CONCAT(a,LPAD(b,10,'0')) as UNSIGNED) id
     , a
     , b
     , c
     , d
  FROM table_a;

或者干脆

UPDATE table_a SET id = CAST(CONCAT(a,LPAD(b,10,'0'));