欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mysql中使用sql語(yǔ)句生成雪花算法Id

 更新時(shí)間:2025年02月16日 09:10:13   作者:Dream_sky分享  
雪花算法是一種生成全局唯一ID的分布式算法,本文主要介紹了Mysql中使用sql語(yǔ)句生成雪花算法Id,具有一定的參考價(jià)值,感興趣的可以了解一下

一、雪花算法簡(jiǎn)介

雪花算法(Snowflake)是一種生成全局唯一ID的分布式算法。它的主要功能是在分布式系統(tǒng)中生成一個(gè)全局唯一的ID,且ID是按照時(shí)間有序遞增的。

Snowflake算法使用一個(gè)64位的二進(jìn)制數(shù)字作為ID。這64位long型ID被分割成四個(gè)部分:符號(hào)位、時(shí)間戳、工作機(jī)器ID、序列號(hào)。通過(guò)這幾部分來(lái)表示不同的信息,將數(shù)據(jù)映射到具有特定結(jié)構(gòu)的分布式系統(tǒng)中,實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)和查詢(xún)。

在這里插入圖片描述

二、問(wèn)題描述(項(xiàng)目場(chǎng)景)

將A表中的指定數(shù)據(jù)補(bǔ)償?shù)紹表中,B表id是bigint類(lèi)型的雪花算法(原始數(shù)據(jù)是代碼生成的雪花算法id),我這里只做補(bǔ)償使用sql實(shí)現(xiàn),

這里就需要給id賦值,并且滿(mǎn)足之前原表的數(shù)據(jù)規(guī)則

insert into select -將一個(gè)表的數(shù)據(jù)添加到另外一個(gè)表中

-- insert into select -將一個(gè)表的數(shù)據(jù)添加到另外一個(gè)表中
insert into table_name2(id, project_code)
select 雪花算法id, project_code from table_name1 where type = 1;

三、sql生成雪花算法(已驗(yàn)證)

3.1 存儲(chǔ)函數(shù)創(chuàng)建

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; -- 假設(shè)機(jī)器 ID 為 1
    DECLARE data_center_id BIGINT DEFAULT 0; -- 假設(shè)數(shù)據(jù)中心 ID 為 0
    DECLARE epoch BIGINT DEFAULT 1288834974657;
    -- 2010-01-01 00:00:00 UTC 的毫秒數(shù)

    -- 獲取當(dāng)前時(shí)間戳(毫秒)
    SET timestamp = FLOOR(UNIX_TIMESTAMP(NOW(3)) * 1000) - epoch;

    -- 檢查當(dāng)前時(shí)間戳
    IF timestamp = @last_timestamp THEN
        SET @sequence = (@sequence + 1) % 4096; -- 在同一毫秒內(nèi)遞增序列號(hào)
    ELSE
        SET @sequence = 0; -- 不同毫秒重置序列號(hào)
    END IF;

    SET @last_timestamp = timestamp;
    -- 存儲(chǔ)當(dāng)前時(shí)間戳

    -- 生成雪花 ID
    RETURN (timestamp << 22) | (data_center_id << 17) | (machine_id << 12) | @sequence;
END //
DELIMITER ;

3.2 測(cè)試生成雪花id

-- 測(cè)試生成 Snowflake ID
SELECT generate_snowflake_id();

在這里插入圖片描述

四、實(shí)際應(yīng)用

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

成功添加

在這里插入圖片描述

到此這篇關(guān)于Mysql中使用sql語(yǔ)句生成雪花算法Id的文章就介紹到這了,更多相關(guān)Mysql中使用sql語(yǔ)句生成雪花算法Id內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL JOIN之完全用法

    MySQL JOIN之完全用法

    最近在做mysql的性能憂(yōu)化,做到多表連接查詢(xún),比較頭疼,看了一些join的資料,終于搞定,這里分享出來(lái)!
    2009-12-12
  • MySql無(wú)法連接本地地址localhost問(wèn)題

    MySql無(wú)法連接本地地址localhost問(wèn)題

    這篇文章主要介紹了MySql無(wú)法連接本地地址localhost問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • MySQL數(shù)據(jù)庫(kù)必知必會(huì)之安全管理

    MySQL數(shù)據(jù)庫(kù)必知必會(huì)之安全管理

    MySQL數(shù)據(jù)庫(kù)通常包含關(guān)鍵的數(shù)據(jù),為確保這些數(shù)據(jù)的安全和完整,需要利用訪問(wèn)控制和用戶(hù)管理的功能,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)必知必會(huì)之安全管理的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • mysql命令導(dǎo)出表結(jié)構(gòu)和數(shù)據(jù)的操作方法

    mysql命令導(dǎo)出表結(jié)構(gòu)和數(shù)據(jù)的操作方法

    在日常使用中,我們經(jīng)常需要對(duì)數(shù)據(jù)庫(kù)進(jìn)行備份和復(fù)制,因此必須了解如何導(dǎo)出表結(jié)構(gòu)和表數(shù)據(jù),以下是使用MySQL命令導(dǎo)出表結(jié)構(gòu)和表數(shù)據(jù)的方法,感興趣的朋友一起看看吧
    2023-11-11
  • MySQL分表和分區(qū)分表的區(qū)別小結(jié)

    MySQL分表和分區(qū)分表的區(qū)別小結(jié)

    MySQL分表和分區(qū)分表是兩種常見(jiàn)的數(shù)據(jù)分割方案,本文主要介紹了MySQL分表和分區(qū)分表的區(qū)別小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • mysql中varchar和text的區(qū)別和比較

    mysql中varchar和text的區(qū)別和比較

    在存儲(chǔ)字符串時(shí)可以使用char、varchar或者text類(lèi)型,下面這篇文章主要給大家介紹了關(guān)于mysql中varchar和text的區(qū)別和比較的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • mysqldump備份數(shù)據(jù)庫(kù)時(shí)排除某些庫(kù)的實(shí)例

    mysqldump備份數(shù)據(jù)庫(kù)時(shí)排除某些庫(kù)的實(shí)例

    下面小編就為大家?guī)?lái)一篇mysqldump備份數(shù)據(jù)庫(kù)時(shí)排除某些庫(kù)的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • 你的like語(yǔ)句為什么沒(méi)索引詳解

    你的like語(yǔ)句為什么沒(méi)索引詳解

    這篇文章主要給大家介紹了關(guān)于你的like語(yǔ)句為什么沒(méi)索引的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • Mysql?innoDB修改自增id起始數(shù)的方法步驟

    Mysql?innoDB修改自增id起始數(shù)的方法步驟

    本文主要介紹了Mysql?innoDB修改自增id起始數(shù)的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2023-03-03
  • SQL實(shí)現(xiàn)LeetCode(177.第N高薪水)

    SQL實(shí)現(xiàn)LeetCode(177.第N高薪水)

    這篇文章主要介紹了SQL實(shí)現(xiàn)LeetCode(177.第N高薪水),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08

最新評(píng)論