mysql部分实现类似oracle sequence功能的测试

来源:这里教程网 时间:2026-03-01 16:35:54 作者:

在文章 《mysql实现sequence功能的代码》 更新时间:2019年03月14日 11:06:11   作者:江上一叶舟   基础之上进行的实验完善。在mysql数据库上实现oracle 循环sequence功能。mysql 操作版本mysql 8.0.28 -- 1.建立sequence记录表 drop table crm_sequence; CREATE TABLE crm_sequence (  seq_name varchar(64)  NOT NULL,  min_value int NOT NULL,  max_value int NOT NULL,  current_value int NOT NULL,  increment_value int NOT NULL DEFAULT '1',  PRIMARY KEY (seq_name) ) ENGINE=InnoDB ; -- 2.建立_nextval函数,循环使用sequence drop FUNCTION _nextval; DELIMITER $$ CREATE FUNCTION _nextval(name varchar(64)) RETURNS int DETERMINISTIC begin declare _cur int; declare _maxvalue int; -- 接收最大值 declare _increment int; -- 接收增长步数 set _increment = (select increment_value from crm_sequence where seq_name = name); set _maxvalue = (select max_value from crm_sequence where seq_name = name); set _cur = (select current_value from crm_sequence where seq_name = name); if(_cur + _increment >= _maxvalue) then -- 判断下一值是否达到最大值,达到则重置当前值为最小值    update crm_sequence     set current_value = min_value     where seq_name = name ; else     update crm_sequence           -- 以指定步长更新当前值     set current_value = _cur + increment_value     where seq_name = name ; end if; set _cur = (select current_value from crm_sequence where seq_name = name); return _cur; end$$ DELIMITER ; -- 3. 建立_currval函数,获取sequence当前值 drop FUNCTION _currval; DELIMITER $$ CREATE FUNCTION _currval(name varchar(64)) RETURNS int DETERMINISTIC begin declare _cur int; set _cur = (select current_value from crm_sequence where seq_name = name); return _cur; end$$ DELIMITER ; -- 4.向crm_sequence表中新建想要的sequnce INSERT INTO crm_sequence (seq_name, min_value, max_value, current_value, increment_value) VALUES ('business_group_id', 1, 99999999, 1, 1); -- 5.使用样例,使用sequence select _currval('business_group_id'); select _nextval('business_group_id'); select _currval('business_group_id');

相关推荐