美文网首页
数据库的序列

数据库的序列

作者: TheRaging | 来源:发表于2021-04-14 14:33 被阅读0次

    场景需求

    需要向下图一样,需要对产品编码编码设置一个序列。编码规则 SKU + 序列号:

    image.png

    序列

    序列是基于bigint算法的,因此范围是不能超过一个八字节 整数的范围(-9223372036854775808 到 9223372036854775807)。

    由于nextval和setval调用绝不会回滚, 如果需要序数的"无间隙"分配,则不能使用序列对象。可以 通过在一个只包含一个计数器的表上使用排他锁来构建无间隙的分配, 但是这种方案比序列对象开销更大,特别是当有很多事务并发请求序数时

    创建和使用语法:

    CREATE SEQUENCE serial START 101;
    
    SELECT nextval('serial');
    
     nextval
    ---------
         101
    
    CREATE SEQUENCE 序列名
    
    INCREMENT BY 进度值
    
    START WITH 初始值
    
    MAXvalue 最大值
    
    MINVALUE 最小值
    
    CYCLE 循环(NOCYCLE 不循环)
    
    CACHE 缓存个数 (NOCACHE 不设置缓存)
    

    删除序列

    drop sequence SEQ_AI_ZQZT_ZZZ_TEST;
    

    结合mybatis使用序列,在insert的时候自动新增

    <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>
    
    

    表 中列出的这些序列函数,可以为我们从序列对象中获取连续的序列值提供了简单的、多用户安全的 方法。

    image.png

    相关文章

      网友评论

          本文标题:数据库的序列

          本文链接:https://www.haomeiwen.com/subject/prgklltx.html