zoukankan      html  css  js  c++  java
  • 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;

     点个赞吧,鼓励一下!

  • 相关阅读:
    adb命令之adb install
    GNU make and Makefile
    Makefile经典教程(掌握这些足够)
    Android.mk简介
    PhoneFactory.getDefaultPhone must be called from Looper thread
    Android源码目录结构
    软件部通用技术类网站名录
    β测试
    α测试
    白盒测试
  • 原文地址:https://www.cnblogs.com/pecool/p/13321375.html
Copyright © 2011-2022 走看看