MySQL为特定列插入唯一ID

时间:2016-12-15 21:28:58

标签: mysql unique auto-increment uniqueidentifier

在MySQL 5.5& 5.7,如果有一个包含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

无论如何,我们可以根据a&列的每个独特组合添加另一个唯一的“ID”列(int或bigint)。 b在现有表格中?例如:

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,这似乎不适用于此,除非我错过了什么。任何古茹都可以开导吗?谢谢!

2 个答案:

答案 0 :(得分:1)

编写一个查询,为ab的每个组合分配一个递增的数字,然后将其与UPDATE查询中的原始表一起加入。

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

答案 1 :(得分:1)

Chubaka!

您可以使用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'));