MySQL的sequence解决方案

转载 于 2014-10-15 15:33:07 发布 · 2.4k 阅读
· 0
· 0

本文介绍了一种在MySQL中实现类似Oracle Sequence的方法。通过创建Sequence表和定义CURRVAL、NEXTVAL及SETVAL函数,可以有效地在MySQL中模拟Sequence的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于MySQL不支持sequence,所以从Oracle迁移时需要采用自定义sequence的方式来解决。

1. 首先建立一张sequence基础表,用来存储用户所有的sequence内容。

CREATE TABLE seqmysql

(

   seqname          varchar(50),

   `currentValue`   int(11),

   increment        int(11) DEFAULT 1

)

2. 创建sequence操作函数。

获取当前序列值函数 currval:

CREATE DEFINER=`mysql`@`%` FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS int(11)

BEGIN

  DECLARE current INTEGER;

  SET current = 0;

  SELECT currentValue INTO current

  FROM seqMysql

  WHERE seqname = seq_name;

  RETURN current;

END

获取序列下一值函数 nextval:

CREATE DEFINER=`mysql`@`%` FUNCTION `nextval`(seq_name VARCHAR(50)) RETURNS int(11)

BEGIN

   UPDATE seqMysql

   SET currentValue = currentValue + increment

   WHERE seqname = seq_name;

   RETURN currval(seq_name);

END

设置序列当前值 setval

CREATE DEFINER=`mysql`@`%` FUNCTION `setval`(seq_name VARCHAR(50), value INTEGER) RETURNS int(11)

BEGIN

   UPDATE seqMysql

   SET currentValue = value

   WHERE seqname = seq_name;

   RETURN currval(seq_name);

END

使用如下方式使用MySQL的序列:

--创建一个序列,起始为1,步长为1

INSERT INTO seqmysql VALUES ('my_seq', 1, 1);

--从序列中取出下一个值

SELECT nextval('my_seq') FROM DUAL;

--从序列中取出当前值

SELECT currval('my_seq') FROM DUAL;

--设置序列当前值

SELECT setval('my_seq', 5) FROM DUAL;

 

确定要放弃本次机会?
福利倒计时
: :

立减 ¥

普通VIP年卡可用
立即使用
sxtobj
关注 关注
  • 0
    点赞
  • 踩
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
  • 分享
    复制链接
    分享到 QQ
    分享到新浪微博
    扫一扫
  • 举报
    举报
参与评论 您还未登录,请先 登录 后发表或查看评论
sxtobj

博客等级

码龄14年
2
原创
16
点赞
71
收藏
4
粉丝
关注
私信

热门文章

  • oracle向PostgreSQL迁移 8515
  • “bash: fork: Resource temporarily unavailable”的解决方案 8145
  • TUXEDO配置参数详解 远程客户端配置 7430
  • FML32 API 6304
  • linux中文文件夹如何改回英文 4621

分类专栏

  • UNIX/linux
    22篇
  • tuxedo
    8篇
  • linux shell
    5篇
  • vim
    2篇
  • 编译
    8篇
  • AIX
    2篇
  • oracle
    22篇
  • DOS
    2篇
  • 人文
    2篇
  • 架构
    2篇
  • 数据结构与算法
    1篇
  • Redis
    1篇

展开全部 收起

上一篇:
解决远程登陆Linux误按ctrl+s锁屏
下一篇:
大型网站系统架构演化之路

最新评论

  • oracle向PostgreSQL迁移

    qq_35773499: 正好参与 oracle向PostgreSQL迁移 项目,能留下联系方式吗?请多多指教 我的手机微信是 15801766602

  • select真的有限制吗

    金士顿 回复 金士顿: 只是linux文件描述符是按顺序分配的,for循环可以一次判断

  • select真的有限制吗

    金士顿: 既然fd_set中不包含其保存了多少个fd的计数,那么select的实现里要知道自己要处理多少个fd,那只能使用FD_SETSIZE宏去做判定,但Linux的实现选用了更好的方式,即通过第一个参数让应用层告诉select需要处理的最大fd(这里不是数量)。那么其实现大概为 即通过第一个参数让应用层告诉select需要处理的最大fd(这里不是数量) 第一个参数是数量的意思吧?

  • Tuxedo数据buffer基本类型介绍

    sino02675: 学习

最新文章

  • Linux select 文件描述符1024限制
  • select真的有限制吗
  • socket中的函数遇见EINTR的处理
2016年12篇
2015年8篇
2014年13篇
2013年33篇
2012年18篇

目录

展开全部

收起

目录

展开全部

收起

上一篇:
解决远程登陆Linux误按ctrl+s锁屏
下一篇:
大型网站系统架构演化之路

分类专栏

  • UNIX/linux
    22篇
  • tuxedo
    8篇
  • linux shell
    5篇
  • vim
    2篇
  • 编译
    8篇
  • AIX
    2篇
  • oracle
    22篇
  • DOS
    2篇
  • 人文
    2篇
  • 架构
    2篇
  • 数据结构与算法
    1篇
  • Redis
    1篇

展开全部 收起

目录

评论
被折叠的  条评论 为什么被折叠? 到【灌水乐园】发言
查看更多评论
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值