news 2026/7/24 7:58:19

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/7/22 13:23:16

MySQL下载安装及配置

1.官网下载https://dev.mysql.com/downloads/mysql/2.下载解压安装包3.把下载文件打开&#xff0c;进入到bin文件中&#xff0c;将文件路径复制到系统变量path中4. 在MySQLmysql-9.1.0-winx64文件夹的根目录下&#xff0c;新建一个my.ini文件&#xff0c;把下面内容复制到文件中…

作者头像 李华
网站建设 2026/7/24 0:58:54

MySQL加减间隔时间函数DATE_ADD和DATE_SUB的详解

目录 前言语法示例代码运用 前言 mysql中内置函数date_add 和 date_sub能对指定的时间进行增加或减少一个指定的时间间隔&#xff0c;返回的是一个日期。 语法 添加时间间隔 DATE_ADD(date,INTERVAL expr type)SELECT DATE_add(NOW(),INTERVAL -7 DAY);//获取7天前的日期…

作者头像 李华
网站建设 2026/7/23 1:52:03

学霸同款8个一键生成论文工具,专科生毕业论文轻松搞定!

学霸同款8个一键生成论文工具&#xff0c;专科生毕业论文轻松搞定&#xff01; AI 工具助力论文写作&#xff0c;轻松应对学术挑战 随着人工智能技术的不断发展&#xff0c;AI 工具在学术写作中的应用越来越广泛。对于专科生来说&#xff0c;撰写毕业论文是一项既重要又充满挑战…

作者头像 李华
网站建设 2026/7/20 16:44:57

你的监控99%的时间都在浪费电!3步让它变24小时超级员工

传统监控系统在实际应用中存在诸多问题&#xff0c;这些问题不仅导致资源浪费&#xff0c;还无法有效发挥监控系统的实际作用&#xff0c;给企业带来了潜在的安全隐患。 1.ONE 传统监控系统的问题 无效画面与资源浪费 公司安装的摄像头虽24小时开启&#xff0c;但99%录下的是…

作者头像 李华
网站建设 2026/7/20 4:26:35

点云在qt窗口还原

首先介绍一下pcl::visualization::Camera cam;数据结构 本质来说是保存了visualizer在显示时相机的姿态 可以通过 visualizer->getcameraparamters(cam)获得 赋值通过 visualizer->setcameraparamters(cam)对场景下的相机进行赋值 cam.pos 是eigen::vector3f结构…

作者头像 李华
网站建设 2026/7/22 7:36:14

Maven 构建配置文件详解

Maven 构建配置文件详解 引言 Maven 是一个强大的项目管理工具,广泛应用于 Java 项目的构建和依赖管理。构建配置文件是 Maven 项目的核心组成部分,它定义了项目的构建过程、依赖关系以及各种构建参数。本文将详细解析 Maven 构建配置文件,帮助开发者更好地理解和使用 Mav…

作者头像 李华