news 2026/4/23 12:26:55

Mysql中使用sql语句生成雪花算法Id

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Mysql中使用sql语句生成雪花算法Id

??简介:java系列技术分享(??持续更新中…??)
??初衷:一起学习、一起进步、坚持不懈
??如果文章内容有误与您的想法不一致,欢迎大家在评论区指正??
??希望这篇文章对你有所帮助,欢迎点赞 ?? 收藏 留言 ??

??更多文章请点击
[这里是图片002]

文章目录
  • 一、雪花算法简介
  • 二、问题描述(项目场景)
  • 三、sql生成雪花算法(已验证)
    • 3.1 存储函数创建
    • 3.2 测试生成雪花id
  • 四、实际应用

一、雪花算法简介

雪花算法(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 DATA BEGIN 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 ID SELECT generate_snowflake_id();

四、实际应用

insert into table_name2(id, project_code) select generate_snowflake_id(), project_code from table_name1 where type = 1;

成功添加

[这里是图片008]

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 22:42:44

MySQL中replace into详解、批量更新、不存在插入存在则更新、replace into的坑

文章目录 一、replace into原理二、replace into的三种形式三、replace into 使用案例 3.1、replace into values 3.1.1、只有主键且主键冲突3.1.2、有主键有唯一索引且主键冲突3.1.3、有主键有唯一索引且唯一索引冲突(有坑)3.1.4、有主键有唯一索引且与一条主键冲突与另一条唯…

作者头像 李华
网站建设 2026/4/20 19:06:03

不买量也能爆?虎牙发行《鹅鸭杀》破圈真相

据财经网的报道&#xff0c;由虎牙与金山世游联合发行的《鹅鸭杀》手游于1月7日正式公测开服&#xff0c;公测上线仅24小时新增注册用户破500万&#xff0c;并登顶iOS免费榜&#xff0c;随后占据多家商店平台游戏榜榜首。开服当天&#xff0c;“鹅鸭杀手游公测”“你抢到鹅鸭杀…

作者头像 李华
网站建设 2026/4/20 13:13:29

【必藏】大模型分布式推理完全指南:vLLM单节点与多节点部署实战

文章详解vLLM大模型分布式推理部署方法&#xff0c;包括单GPU、单节点多GPU张量并行、多节点多GPU张量并行与流水线并行三种场景。提供单节点和多节点环境的具体部署命令&#xff0c;介绍multiprocessing和Ray两种分布式运行时配置。通过实例展示参数设置及多节点环境配置&…

作者头像 李华
网站建设 2026/4/20 14:53:38

交通仿真软件:Aimsun_(15).交通事件管理

交通事件管理 交通事件管理是交通仿真中的一个重要模块&#xff0c;它涉及如何在仿真过程中处理各种交通事件&#xff0c;如交通事故、道路施工、交通信号故障等。这些事件对交通流的影响是显著的&#xff0c;因此在仿真中正确地管理这些事件可以提高仿真的真实性和准确性。本节…

作者头像 李华
网站建设 2026/4/18 5:32:40

交通仿真软件:Aimsun_(16).接口与外部数据交换

接口与外部数据交换 在交通仿真软件中&#xff0c;接口与外部数据交换是实现高级功能和定制化需求的关键环节。Aimsun 提供了丰富的接口和数据交换机制&#xff0c;使用户能够将仿真模型与外部系统或数据源进行无缝集成。本节将详细介绍 Aimsun 的接口与外部数据交换机制&#…

作者头像 李华
网站建设 2026/4/20 15:27:14

标杆案例 | 长江产业集团数智化转型驱动国企人力资源管理新范式

当前&#xff0c;数字经济加速渗透各行各业&#xff0c;人力资源管理数字化已成为企业顺应技术变革、支撑战略落地的关键路径。作为扎根长江经济带、深耕产业升级的重要力量&#xff0c;长江产业集团将人力资源数字化建设纳入深化改革的重要举措&#xff0c;携手红海云以新一代…

作者头像 李华