最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Mysql通过sql语句生成雪花算法Id实例
时间:2026-07-05 10:43:17 编辑:袖梨 来源:一聚教程网
一、雪花算法简介
雪花算法(Snowflake)是一种生成全局唯一ID的分布式算法。它的主要功能是在分布式系统中生成一个全局唯一的ID,且ID是按照时间有序递增的。
Snowflake算法使用一个64位的二进制数字作为ID。
这64位long型ID被分割成四个部分:符号位、时间戳、工作机器ID、序列号。
通过这几部分来表示不同的信息,将数据映射到具有特定结构的分布式系统中,实现数据的存储和查询。

二、问题描述(项目场景)
将A表中的指定数据补偿到B表中,B表id是bigint类型的雪花算法(原始数据是代码生成的雪花算法id),我这里只做补偿使用sql实现,
这里就需要给id赋值,并且满足之前原表的数据规则
insert into select -将一个表的数据添加到另外一个表中
-- insert into select -将一个表的数据添加到另外一个表中insert into table_name2(id, project_code)select 雪花算法id, project_code from table_name1 where type = 1;
三、sql生成雪花算法(已验证)
3.1 存储函数创建
SET @last_timestamp = -1; -- 初始化全局变量SET @sequence = 0; -- 初始化全局变量DROP FUNCTION IF EXISTS generate_snowflake_id;DELIMITER //CREATE FUNCTION generate_snowflake_id() RETURNS BIGINT READS SQL DATABEGIN DECLARE timestamp BIGINT; DECLARE machine_id BIGINT DEFAULT 1; -- 假设机器 ID 为 1 DECLARE data_center_id BIGINT DEFAULT 0; -- 假设数据中心 ID 为 0 DECLARE epoch BIGINT DEFAULT 1288834974657; -- 2010-01-01 00:00:00 UTC 的毫秒数 -- 获取当前时间戳(毫秒) SET timestamp = FLOOR(UNIX_TIMESTAMP(NOW(3)) * 1000) - epoch; -- 检查当前时间戳 IF timestamp = @last_timestamp THEN SET @sequence = (@sequence + 1) % 4096; -- 在同一毫秒内递增序列号 ELSE SET @sequence = 0; -- 不同毫秒重置序列号 END IF; SET @last_timestamp = timestamp; -- 存储当前时间戳 -- 生成雪花 ID RETURN (timestamp << 22) | (data_center_id << 17) | (machine_id << 12) | @sequence;END //DELIMITER ;
3.2 测试生成雪花id
-- 测试生成 Snowflake IDSELECT generate_snowflake_id();

四、实际应用
insert into table_name2(id, project_code)select generate_snowflake_id(), project_code from table_name1 where type = 1;
成功添加~

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持本站。
您可能感兴趣的文章:- MySQL生成雪花算法ID的实现示例
- Mysql中雪花算法(Snowflake)的使用
- Mysql中使用sql语句生成雪花算法Id
- 利用mysql实现的雪花算法案例
相关文章
- 刀剑缭乱2026公测兑换码大全一览 07-05
- 崩坏星穹铁道4.0卡池7个新角色一览 07-05
- 明日方舟终末地开服工业蓝图一览 工业蓝图作用与使用思路解析 07-05
- 原神梦之树怎么开启 梦之树开启条件 07-05
- 帕瓦勇者传说持续伤害阵容搭配推荐 07-05
- 明日方舟:终末地全新玩法 蚀像寻遗怎么玩介绍 07-05