当前位置: 首页 > news >正文

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]

http://www.jsqmd.com/news/217079/

相关文章:

  • MySQL下载安装及配置
  • Nacos实例缓存
  • 标杆案例 | 长江产业集团数智化转型驱动国企人力资源管理新范式
  • mysql之如何获知版本
  • JSON.parse() 方法详解
  • 2025年比亚迪全系更新上线维修手册电路图钣金手册故障诊断支持超链接跳转宋L 海豹 汉EV 唐-新能源 驱逐舰05 海鸥 海豚 元PLUS 汉DM 宋PLUS
  • 交通仿真软件:Aimsun_(19).交通仿真软件在规划中的应用
  • 大数据领域 OLAP 的高可用性架构设计
  • 长安睿行EM60 睿行EM8 0睿行ES30 睿行M60 睿行M70 睿行M80 睿行M90 睿行S50维修手册电路图针脚定义大修正时螺丝扭力拆装步骤线路保险丝图解模块位置更新
  • 长安凯程神骐维修手册电路图资料更新神骐ET20 神骐F30 神骐PLUS 神骐T10 神骐T20 神骐T30拆装步骤螺丝扭力针脚定义保险丝图解发动机大修螺丝扭力正时校对
  • 交通仿真软件:Aimsun_(13).网络优化与设计
  • 计算机深度学习毕设实战-机器学习基于cnn识别微小细胞细菌细胞器
  • 深度学习毕设项目推荐-基于人工智能python深度学习的猫狗表情识别
  • 2026年AI面试如何选?五大黄金标准与避坑指南
  • 数码宣传图素材推荐:解锁让产品画面更有故事感的视觉灵感
  • 金融级IP离线库深度测评:IP数据云 vs IPnews vs MaxMind
  • HTML 语言代码:全面解析与使用指南
  • 快递柜扫码取件,怎样用IP查询定位比对收货地址GPS防“代签”?
  • 全网最全专科生AI论文网站TOP10:开题报告文献综述必备工具
  • 深度学习毕设项目推荐-基于python-cnn识别微小细胞细菌细胞器
  • Java中有哪些垃圾回收算法?
  • 【计算机毕业设计案例】基于python深度学习的印刷体数字和字母识别基于深度学习的印刷体数字和字母识别
  • Go 语言变量作用域
  • 二分搜索树的特性
  • 2026继续教育必备!9个降AI率工具测评榜单
  • 【苹果分级】机器视觉苹果质量检测及总分级系统【含GUI Matlab源码 14878期】
  • 深度洞察!认知计算与提示工程融合,提示工程架构师的关键要点
  • sqlite用的人多吗?
  • 【毕业设计】机器学习基于cnn识别微小细胞细菌细胞器
  • 【计算机毕业设计案例】人工智能基于python深度学习的猫狗表情识别