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,但似乎在这里不起作用,除非我遗漏了什么。有上师能开导吗?谢谢!
编写一个查询,为 a
和 b
的每个组合分配一个递增的数字,然后在 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'));
在 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,但似乎在这里不起作用,除非我遗漏了什么。有上师能开导吗?谢谢!
编写一个查询,为 a
和 b
的每个组合分配一个递增的数字,然后在 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'));