MySql非主键序列自增

MySql只能创建一个表字段的序列自增,如果需要两个或者多个序列自增就需要如下方法:

此处设置了两个序列自增供使用:
在这里插入图片描述

一: 创建一张表格:sequence 增加如下三个字段 1.序列名称 2.当前序列的值 3.步长:每次增加的数值

drop table if exists sequence;     
create table sequence (         
seq_name        VARCHAR(50) NOT NULL, -- 序列名称         
current_val     INT         NOT NULL, -- 当前值         
increment_val   INT         NOT NULL    DEFAULT 1, -- 步长(跨度)         
PRIMARY KEY (seq_name)   ); 

二: 为表字段创建两组数据

INSERT INTO sequence VALUES ('member', '0', '1');  
INSERT INTO sequence VALUES ('sort_num', '0', '1'); 

三:创建 函数 用于获取序列当前值(v_seq_name 参数值 代表序列名称)

create function currval(v_seq_name VARCHAR(50))     
returns integer    
begin        
    declare value integer;         
    set value = 0;         
    select current_val into value  from sequence where seq_name = v_seq_name;   
   return value;   
end;  

四:查询当前序列的值

select currval('member'); 
select currval('sort_num'); 

五: 创建 函数 用于获取序列下一个值(v_seq_name 参数值 代表序列名称)

create function nextval (v_seq_name VARCHAR(50))  
    returns integer  
begin  
    update sequence set current_val = current_val + increment_val  where seq_name = v_seq_name;  
    return currval(v_seq_name);  
end;

六: 查询序列的下一个值

select nextval('member'); 
select nextval('sort_num'); 

七:展示创建的函数 以及 指定函数名删除函数

show function STATUS
drop function currval
drop function nextval

八: 通过调用查询数据库,获取序列值,然后操作

    <select id="getMember" resultType="java.lang.Integer">
        select nextval('member');
    </select>


    <select id="getSortNum" resultType="java.lang.Integer">
        select nextval('sort_num');
    </select>


版权声明:本文为m0_50255424原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。