前言
MySQL表无主键、表里字段都不能作为主键,如何新增有序UUID为主键?
在原本数据量很大,不想用主键自增且不想用无序的UUID
情况下,本文介绍了如何使用UUID()且使它有序的一种思路。
如果你使用的MySQL 8.0 以上版本,可以直接使用 uuid_to_bin();
本文主要介绍了 MySQL 5.x 的版本。
提示:以下是本篇文章正文内容,下面案例可供参考
一、使用步骤
-- 将 my_table 拷贝 my_table_backup 的新增一个字段;
Alter TABLE my_table_backup ADD id varchar(50) first;
-- 如果是MySQL 8.0以上 就可以使用直接使用uuid_to_bin(),就只需要下面一步。
-- 将有无主键的表 my_table 的数据迁移到 my_table_back
INSERT INTO my_table_backup (id,originalId,contractId,remark)
SELECT uuid() as id, originalId,contractId,remark
FROM my_table order by createTime;
-- 将UUID 修改为特定的格式;手动实现 uuid_to_bin() 函数的逻辑。
UPDATE my_table_backup AS t1
JOIN (
select
CONCAT(
SUBSTR(t1.id, 15, 4),
SUBSTR(t1.id, 10, 4),
SUBSTR(t1.id, 1, 8),
SUBSTR(t1.id, 20, 4),
SUBSTR(t1.id, 25) ) sortId,
t1.* FROM my_table_backup t1
) AS subquery ON t1.id = subquery.id
SET t1.id = subquery.sortId;
-- 将新增的字段设置为主键
alter table my_table_backup add primary key(id);
总结
参考文章
MySQL中UUID介绍
https://blog.csdn.net/qq_62982856/article/details/127963602
MySQL中存储UUID的最佳实践
https://blog.csdn.net/gt9000/article/details/88240649