最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL實(shí)現(xiàn)雪花Id函數(shù)

 更新時(shí)間:2023年11月01日 11:11:10   作者:JiaMu?Sun  
相比UUID無(wú)序生成的id而言,雪花算法是有序的,而且都是由數(shù)字組成,本文主要介紹了MySQL實(shí)現(xiàn)雪花Id函數(shù),具有一定的參考價(jià)值,感興趣的可以了解一下

環(huán)境 MySQL5.7

簡(jiǎn)介

snowflake是Twitter開(kāi)源的分布式ID生成算法,結(jié)果是64bit的Long類型的ID,有著全局唯一和有序遞增的特點(diǎn)。

show

  • 最高位是符號(hào)位,因?yàn)樯傻?ID 總是正數(shù),始終為0,不可用。
  • 41位的時(shí)間序列,精確到毫秒級(jí),41位的長(zhǎng)度可以使用69年。時(shí)間位還有一個(gè)很重要的作用是可以根據(jù)時(shí)間進(jìn)行排序。
  • 10位的機(jī)器標(biāo)識(shí),10位的長(zhǎng)度最多支持部署1024個(gè)節(jié)點(diǎn)。
  • 12位的計(jì)數(shù)序列號(hào),序列號(hào)即一系列的自增ID,可以支持同一節(jié)點(diǎn)同一毫秒生成多個(gè)ID序號(hào),12位的計(jì)數(shù)序列號(hào)支持每個(gè)節(jié)點(diǎn)每毫秒產(chǎn)生4096個(gè)ID序號(hào)。
  • 缺點(diǎn)也是有的,就是強(qiáng)依賴機(jī)器時(shí)鐘,如果機(jī)器上時(shí)鐘回?fù)?,有可能?huì)導(dǎo)致主鍵重復(fù)的問(wèn)題。

雪花Id

腳本根據(jù) github:https://github.com/yitter/IdGenerator/tree/master/SQL 的SQL Server 版移植而來(lái)

雪花Id腳本

CREATE FUNCTION `SnowId`() RETURNS bigint(20)
BEGIN
	
	DECLARE b_current_time BIGINT;
	DECLARE b_time_tick BIGINT;
	DECLARE i_work_id INT;
	DECLARE i_work_id_big_length INT;
	DECLARE i_seq_big_length INT;
	DECLARE f_random FLOAT;
	
	DECLARE b_res BIGINT;
	
	SET i_work_id = 1;
	SET i_work_id_big_length = 4;
	SET i_seq_big_length = 8;
	SET b_current_time = (REPLACE(UNIX_TIMESTAMP(CURRENT_TIMESTAMP(3)),'.','')) + 0;
	SET b_time_tick = b_current_time - 1582136402000;
	SET f_random = RAND();
	
	SET b_res = b_time_tick * POWER(2, i_work_id_big_length + i_seq_big_length) + i_work_id * POWER(2, i_seq_big_length) + (5 + round((POWER(2, i_seq_big_length)-1) * f_random, 0));
	
	RETURN b_res;
END

測(cè)試腳本

創(chuàng)建一個(gè)名為TestSnowId存儲(chǔ)過(guò)程
內(nèi)容:
定義了一個(gè)int變量i默認(rèn)為1;
創(chuàng)建了一個(gè)臨時(shí)表temp_numbers用于存儲(chǔ)生成的SnowId;
循環(huán)5000次,并將SnowId添加到temp_numbers表內(nèi);
查詢temp_numbers表內(nèi)數(shù)據(jù);
刪除臨時(shí)表;

CREATE PROCEDURE `TestSnowId` () 
BEGIN
	DECLARE i INT DEFAULT 1;
	CREATE TEMPORARY TABLE IF NOT EXISTS temp_numbers ( number BIGINT );
	WHILE i <= 5000 DO
	    INSERT INTO temp_numbers ( number ) VALUES (SnowId ());
		SET i = i + 1;
	END WHILE;
	SELECT * FROM temp_numbers;
	DROP TEMPORARY TABLE IF EXISTS temp_numbers;
END

使用

調(diào)用語(yǔ)句

SELECT SnowId();

getSnowId

測(cè)試是否重復(fù)

CALL TestSnowId();

test

到此這篇關(guān)于MySQL實(shí)現(xiàn)雪花Id函數(shù)的文章就介紹到這了,更多相關(guān)MySQL 雪花Id內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Jaspersoft?Studio添加mysql數(shù)據(jù)庫(kù)配置步驟

    Jaspersoft?Studio添加mysql數(shù)據(jù)庫(kù)配置步驟

    這篇文章主要為大家介紹了Jaspersoft?Studio添加mysql數(shù)據(jù)庫(kù)配置的步驟過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • MySQL遠(yuǎn)程連接丟失問(wèn)題解決方法(Lost connection to MySQL server)

    MySQL遠(yuǎn)程連接丟失問(wèn)題解決方法(Lost connection to MySQL server)

    這篇文章主要介紹了MySQL遠(yuǎn)程連接丟失問(wèn)題解決方法,Mysql錯(cuò)誤Lost connection to MySQL server at ‘reading initial communication packet’, system error: 0解決方法,需要的朋友可以參考下
    2014-06-06
  • 關(guān)于MySQL日期類型的選擇建議

    關(guān)于MySQL日期類型的選擇建議

    在軟件開(kāi)發(fā)中,時(shí)間記錄是不可或缺的功能,如記錄操作時(shí)間、交易時(shí)間等,通常不建議使用字符串存儲(chǔ)日期,因?yàn)樗加每臻g大,并且效率低下,MySQL提供的Datetime和Timestamp是常用的時(shí)間存儲(chǔ)類型,Datetime沒(méi)有時(shí)區(qū)信息,而Timestamp與時(shí)區(qū)有關(guān)
    2024-10-10
  • MySQL密碼忘記了5分鐘快速找回全攻略(附詳細(xì)圖解)

    MySQL密碼忘記了5分鐘快速找回全攻略(附詳細(xì)圖解)

    這篇文章主要介紹了MySQL密碼忘記了5分鐘快速找回的相關(guān)資料,適用于Windows和Mac系統(tǒng),通過(guò)跳過(guò)權(quán)限驗(yàn)證進(jìn)入無(wú)密碼模式,然后修改root密碼并恢復(fù)權(quán)限驗(yàn)證,需要的朋友可以參考下
    2026-01-01
  • 解析MySQL中INSERT INTO SELECT的使用

    解析MySQL中INSERT INTO SELECT的使用

    本篇文章是對(duì)MySQL中INSERT INTO SELECT的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-07-07
  • MySQL 線上日志庫(kù)遷移實(shí)例

    MySQL 線上日志庫(kù)遷移實(shí)例

    這篇文章主要介紹了MySQL 線上日志庫(kù)遷移實(shí)例,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-03-03
  • 詳解MySQL Workbench使用教程

    詳解MySQL Workbench使用教程

    這篇文章主要介紹了詳解MySQL Workbench使用教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • MySQL實(shí)例精講單行函數(shù)以及字符數(shù)學(xué)日期流程控制

    MySQL實(shí)例精講單行函數(shù)以及字符數(shù)學(xué)日期流程控制

    SQL函數(shù)即數(shù)據(jù)庫(kù)的內(nèi)置函數(shù),可以運(yùn)用在SQL語(yǔ)句中實(shí)現(xiàn)特定的功能。SQL單行函數(shù)對(duì)于每一行數(shù)據(jù)進(jìn)行計(jì)算后得到一行輸出結(jié)果。SQL單行函數(shù)根據(jù)數(shù)據(jù)類型分為字符函數(shù)、數(shù)字函數(shù)、日期函數(shù)、轉(zhuǎn)換函數(shù),另外還有一些別的函數(shù)
    2021-10-10
  • 解決MySQL主從數(shù)據(jù)庫(kù)沒(méi)有同步的兩種方法

    解決MySQL主從數(shù)據(jù)庫(kù)沒(méi)有同步的兩種方法

    這篇文章主要介紹了解決MySQL主從數(shù)據(jù)庫(kù)沒(méi)有同步的兩種方法,需要的朋友可以參考下面文章內(nèi)容
    2021-09-09
  • 保障MySQL數(shù)據(jù)安全的一些建議

    保障MySQL數(shù)據(jù)安全的一些建議

    這篇文章主要介紹了MySQL數(shù)據(jù)安全的一些建議,幫助大家平時(shí)更好的運(yùn)維數(shù)據(jù)庫(kù),保障數(shù)據(jù)安全,感興趣的朋友可以了解下
    2020-08-08

最新評(píng)論

琼结县| 枣庄市| 上犹县| 威宁| 大埔县| 万山特区| 阿荣旗| 大石桥市| 丰宁| 喜德县| 凤山市| 新津县| 涟源市| 余姚市| 卢氏县| 大冶市| 马关县| 祁阳县| 祁连县| 亚东县| 古丈县| 沈阳市| 乐业县| 大厂| 长兴县| 阳朔县| 文山县| 石河子市| 翁牛特旗| 兴山县| 马公市| 景泰县| 金湖县| 桐梓县| 大竹县| 堆龙德庆县| 甘洛县| 墨脱县| 新野县| 河池市| 洛宁县|