MySQL函数模拟Oracle序列

MySQL函数模拟Oracle序列

MySQL模拟Oracle序列

Oracle数据库迁移到MySQL的过程中,需要解决MySQL中没有Oracle的序列功能,本人的解决方案是通过一张表用来记录Oracle中序列的名称、当前序列的值及每次步进长度,通过俩个函数来模拟序列自增,具体代码如下:

建表语句

建表语句.

CREATE TABLE `sys_sequence`  (
  `seq_name` varchar(50),
  `seq_value` int(18) NOT NULL,
  `increment_by` int(18) NOT NULL
)

seq_name:序列名称
curr_value:序列起始值
increment_by:步进长度

查询函数currval

CREATE DEFINER=`labplat`@`%` FUNCTION `currval`(`v_seq_name` varchar(50)) RETURNS int(18)
BEGIN
	#Routine body goes here...
	DECLARE v_currval int(18);
    SET v_currval = 1;  
    SELECT seq_value INTO v_currval FROM sys_sequence WHERE seq_name = v_seq_name;  
    RETURN v_currval;
END

更新函数nextval

CREATE DEFINER=`labplat`@`%` FUNCTION `nextval`(`v_seq_name` varchar(50)) RETURNS int(18)
BEGIN
	#Routine body goes here...
UPDATE sys_sequence SET seq_value = seq_value + increment_by WHERE seq_name = v_seq_name;
	RETURN currval(v_seq_name);
END

分别建好对应的表和函数后,当需要获取序列值的时候,调用nextval()函数,入参为序列名称,nextval()函数会先根据步进长度的值更新对应序列的seq_value值,increment_by为n就更新为seq_value+n,然后nextval()中会调用currval()查到更新后的seq_value值并返回。

MySQL中模拟Oracle序列还有别的方法在次就不一一列举了,此处仅记录自己的解决方案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值