數(shù)據(jù)庫的序列

場景需求

需要向下圖一樣,需要對產(chǎn)品編碼編碼設(shè)置一個(gè)序列。編碼規(guī)則 SKU + 序列號:

image.png

序列

序列是基于bigint算法的,因此范圍是不能超過一個(gè)八字節(jié) 整數(shù)的范圍(-9223372036854775808 到 9223372036854775807)。

由于nextval和setval調(diào)用絕不會(huì)回滾, 如果需要序數(shù)的"無間隙"分配,則不能使用序列對象??梢?通過在一個(gè)只包含一個(gè)計(jì)數(shù)器的表上使用排他鎖來構(gòu)建無間隙的分配, 但是這種方案比序列對象開銷更大,特別是當(dāng)有很多事務(wù)并發(fā)請求序數(shù)時(shí)

創(chuàng)建和使用語法:

CREATE SEQUENCE serial START 101;

SELECT nextval('serial');

 nextval
---------
     101

CREATE SEQUENCE 序列名

INCREMENT BY 進(jìn)度值

START WITH 初始值

MAXvalue 最大值

MINVALUE 最小值

CYCLE 循環(huán)(NOCYCLE 不循環(huán))

CACHE 緩存?zhèn)€數(shù) (NOCACHE 不設(shè)置緩存)

刪除序列

drop sequence SEQ_AI_ZQZT_ZZZ_TEST;

結(jié)合mybatis使用序列,在insert的時(shí)候自動(dòng)新增

<insert id="addUser">
        <selectKey keyProperty="userId" resultType="java.lang.String" order="BEFORE">
            SELECT SEQ_AI_ZQZT_ROLE_ZT_USER.NEXTVAL FROM dual
        </selectKey>
        INSERT INTO AI_ZQZT_ROLE_ZT_USER
        (
        USER_ID,
        CITY_CODE,
        COUNTY_CODE,
        USER_NAME,
        MOBILE_PHONE,
        USER_CODE,
        IS_ZT_MONITOR,
        DATA_STATUS,
        CITY_NAME,
        COUNTY_NAME
        )
        VALUES
        (
        #{userId,jdbcType=VARCHAR},
        #{cityCode,jdbcType=VARCHAR},
        #{countyCode,jdbcType=VARCHAR},
        #{userName,jdbcType=VARCHAR},
        #{mobilePhone,jdbcType=VARCHAR},
        #{userCode,jdbcType=VARCHAR},
        #{isZtMonitor,jdbcType=VARCHAR},
        '1',
        #{cityName,jdbcType=VARCHAR},
        #{countyName,jdbcType=VARCHAR}
        )
    </insert>

表 中列出的這些序列函數(shù),可以為我們從序列對象中獲取連續(xù)的序列值提供了簡單的、多用戶安全的 方法。

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容