首页 > 数据库技术 > 详细

mysql 实现类似Oracle 或 db2 sequence

时间:2020-07-16 13:45:20      阅读:44      评论:0      收藏:0      [点我收藏+]

第一步:创建一个索引管理表,其中包含,索引名称、最小值、最大值、当前值、增量,并设置主键为索引名称。

CREATE TABLE TB_SEQUENCE (
    SEQ_NAME VARCHAR(50) NOT NULL,
    MINVALUE INT NOT NULL ,
    MAX_VAL DECIMAL(31) NOT NULL,
    CURRENT_VAL DECIMAL(31) NOT NULL,
    INCREMENT_VAL INT DEFAULT 1 NOT NULL,
    PRIMARY KEY (SEQ_NAME)
)

 

第二步:给索引管理表中插入要实现的一条索引管理数据

INSERT INTO TB_SEQUENCE (SEQ_NAME, MINVALUE, MAX_VAL, CURRENT_VAL, INCREMENT_VAL) values (SEQ_NUM, 1,  9999999999999999999999999999999, 1, 1);

 

第三步:创建一个获取下一条数据的函数

DELIMITER $$
create function _nextval(name varchar(50)) returns DECIMAL(31)   
begin  
declare _cur DECIMAL(31);
declare _maxvalue DECIMAL(31);
declare _increment int;
declare _nextVal DECIMAL(31);
set _cur = (select CURRENT_VAL from TB_SEQUENCE where SEQ_NAME = name);  
set _increment = (select INCREMENT_VAL from TB_SEQUENCE where SEQ_NAME = name);
set _maxvalue = (select MAX_VAL from TB_SEQUENCE where SEQ_NAME = name);
set _nextVal = _cur + _increment;
update TB_SEQUENCE set CURRENT_VAL = _nextVal where SEQ_NAME = name ;
if(_nextVal >= _maxvalue) then
    update TB_SEQUENCE set CURRENT_VAL = 1 where SEQ_NAME = name ;
end if;
return _nextVal;
end; 
$$
DELIMITER ;

 

好了~

测试一下:

select _nextval(SEQ_NUM) from dual;

技术分享图片

 

 点个赞吧,鼓励一下!

 

mysql 实现类似Oracle 或 db2 sequence

原文:https://www.cnblogs.com/pecool/p/13321375.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!