1. 程式人生 > 實用技巧 >mysql 實現類似Oracle 或 db2 sequence

mysql 實現類似Oracle 或 db2 sequence

第一步:建立一個索引管理表,其中包含,索引名稱、最小值、最大值、當前值、增量,並設定主鍵為索引名稱。

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;

點個贊吧,鼓勵一下!