溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

mysql中怎么生成全局唯一序列

發(fā)布時(shí)間:2021-07-13 15:47:03 來(lái)源:億速云 閱讀:219 作者:Leah 欄目:編程語(yǔ)言

mysql中怎么生成全局唯一序列,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

  • 業(yè)務(wù)場(chǎng)景:訂單系統(tǒng)中生成訂單號(hào),按照每天從1開(kāi)始生成

  • 大致思路是:將生成序列的步驟放到mysql的函數(shù)中實(shí)現(xiàn),java中負(fù)責(zé)調(diào)用mysql函數(shù)獲取序列,代碼中調(diào)用時(shí)需要保證同一時(shí)間只有一次調(diào)用,所以代碼中首先會(huì)將獲取序列服務(wù)類定義成單利的服務(wù)對(duì)象,方法中采用同步關(guān)鍵字。使用jetty測(cè)試工具,在并發(fā)一萬(wàn)情況下調(diào)用改序列生成的函數(shù)無(wú)問(wèn)題,無(wú)重號(hào)。

  • 參考代碼

  • Mysql腳本


DROP TABLE IF EXISTS tbl_sequence; CREATE TABLE tbl_sequence ( name varchar(40) CHARACTER SET utf8 NOT NULL COMMENT '序列名稱', current_value int(15) NOT NULL COMMENT '當(dāng)前值' ) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO tbl_sequence VALUES ('test', '38');

set global log_bin_trust_function_creators=1;

DELIMITER $$
DROP FUNCTION IF EXISTS currval$$
CREATE FUNCTION currval(seq_name VARCHAR(50)) RETURNS varchar(40) BEGIN DECLARE valuep VARCHAR(40); if 0=(SELECT count(name) FROM tbl_sequence WHERE NAME=seq_name) then INSERT INTO tbl_sequence (name, current_value) VALUES (seq_name, '1'); end if; SELECT current_value INTO valuep FROM tbl_sequence WHERE NAME = seq_name; UPDATE tbl_sequence SET current_value = current_value + 1 WHERE NAME = seq_name; RETURN valuep; END $$
DELIMITER;


  • Java代碼


a) Sping中service使用采用單例模式 @Service("serialNumberUtil") @Scope("singleton") public class SerialNumberUtil {

b) 獲取方法中采用同步關(guān)鍵字 public synchronized String getOrderNumber(String pix,String dataStr) { return sequenceDao.getOrderNumber(pix,dataStr); }

看完上述內(nèi)容,你們掌握mysql中怎么生成全局唯一序列的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI