MySQL中使用SQL语句生成雪花算法ID(使用存储函数生成Snowflake算法)

一、雪花算法简介

雪花算法(Snowflake)是一种生成全局唯一ID的分布式算法。它的主要功能是在分布式系统中生成一个全局唯一的ID,且ID是按照时间有序递增的。

Snowflake算法使用一个64位的二进制数字作为ID。这64位long型ID被分割成四个部分:符号位、时间戳、工作机器ID、序列号。通过这几部分来表示不同的信息,将数据映射到具有特定结构的分布式系统中,实现数据的存储和查询。

MySQL中使用SQL语句生成雪花算法ID(使用存储函数生成Snowflake算法)插图

二、问题描述(项目场景)

将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();

    MySQL中使用SQL语句生成雪花算法ID(使用存储函数生成Snowflake算法)插图1

    四、实际应用

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

    搞定了,成功添加!

    MySQL中使用SQL语句生成雪花算法ID(使用存储函数生成Snowflake算法)插图2

    本文来自 Dream_sky分享

    版权声明:

    小编:吾乐吧软件站

    链接:https://www.wuleba.com/3207.html

    来源:吾乐吧软件站

    本资源仅供个人学习,禁止用于商业用途。下载后请于24小时内删除,并支持正版或原作者。因使用本资源导致的任何法律纠纷或损失,由使用者自行承担。

    THE END
    上一篇 前端性能优化实战指南:从加载到渲染的全链路优化
    下一篇 Windows 10 22H2 官方正式版ISO镜像下载(2025年3月更新版)
    相关内容
    转发
    评论
    点赞
    分享
    全部转发 0 只看作者
    按时间倒序 按时间正序

    全部评论 0 只看作者
    按时间倒序 按时间正序
    暂无评论,快来抢沙发吧
    赞赏支持
    微信收款码
    微信扫一扫
    支付宝收款码
    支付宝扫一扫
    投诉内容
    0/200
    上传图片(最多3张,单张不超过2MB)
    生成分享图片
    正在生成预览...