概述

众所周知,Oracle一般使用序列(Sequence)来处理主键字段,而MySQL则提供了自增长(increment)来实现类似的目的。

不过小编在实际使用过程中发现,MySQL的自增长有诸多的弊端:不能控制步长、开始索引、是否循环等;若需要oracle迁移数据库到mysql,主键方面还是不太好处理。


oracle序列

先介绍下oracle序列方面的内容,在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方或者在实际开发中,比如一个需求表格中的需求ID是唯一主键,都可以用sequence来获取。

首先在用Oracle序列号之前,我们首先得创建一个序列然后就可以通过CURRY、NEXTVAL,获取当前表中的返回sequence的当前值、下一个squence的值。可以通过下面的语句来创建Squence:

create sequence INR_REQUIRMENT_SQUENCE INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAXVALUE -- 不设置最大值 NOCYCLE -- 一直累加,不循环 CACHE 10; 

Oracle序列的使用,实际上是使用.nextval和.currval伪列。


mysql模拟Oracle序列的方案

Oracle序列的使用,实际上是使用.nextval和.currval伪列,这里我们的思路是:

1、MySQL中新建表并定义一张表sequence,每一行记录就可以作为一个序列,然后在字段上定义当前值、自增规则; 2、定义一个next函数,用来获取下一个可用的自增主键

总体结构图

1、创建sequence表

drop table if exists cm_sequence;create table cm_sequence(name varchar(50) not null comment '序列的名字,唯一',current_value bigint not null comment '当前的值',increment_value int not null default 1 comment '步长,默认为1',primary key (name));alter table cm_sequence comment '公共的序列表,用于为非自增且要求唯一的字段记录和获取唯一ID。';

2、创建3个函数

2.1、func_currval:获取当前序列的值并返回

drop function if exists func_currval;SET GLOBAL log_bin_trust_function_creators = 1;create function func_currval (seq_name varchar(50))RETURNS integerbegin declare value integer; set value = 0; select current_value into value from cm_sequence where name = seq_name; return value;end;

2.2、func_setval:设置当前序列的值并返回

drop function if exists func_setval;create function func_setval (seq_name varchar(50),value integer) RETURNS integerbegin update cm_sequence set current_value = value where name = seq_name; return func_currval(seq_name);end;

2.3、func_nextval:获取序列中的一个可用的值

drop function if exists func_nextval;create function func_nextval (seq_name varchar(50))RETURNS integercontains sqlbegin update cm_sequence set current_value = current_value + increment_value where name = seq_name; return func_currval(seq_name);end;

3、调用

调用命令如下:

SELECT func_nextval('xxx');

关于oracle自增列用mysql如何去实现就介绍到这了,大家可以自己根据项目需要做一些改造,后面会分享更多mysql方面内容,感兴趣的朋友可以关注下!!

lsdyna如何设置set中的node_list_详解MySQL数据库如何实现类似Oracle的序列?相关推荐

  1. hive replace替换多个_详解Mysql数据库中replace与replace into的用法及区别

    概述 Mysql数据库replace与replace into都是经常会用到的功能:replace其实是做了一次update操作,而不是先delete再insert:而replace into其实与i ...

  2. php mysql source_详解MySQL数据库中有关source命令

    这篇文章主要介绍了MySQL 数据库 source 命令详解及实例的相关资料,需要的朋友可以参考下 MySQL 数据库 source 命令详解及实例 MySQL 数据库 source 命令,该命令是数 ...

  3. mysql创建数据库没有默认值报错_详解Mysql数据库date, datetime类型设置0000-00-00默认值(default)报错问题...

    现象:MySQL5.7版本之后,date, datetime类型设置默认值"0000-00-00",出现异常:Invalid default value for 'time' 原因 ...

  4. mysql中的tee_详解mysql的tee功能 并利用其记录相关操作

    由于经常对mysql数据库进行大量的更改操作,比如更改字段,添加或删除索引等等,我们把这些操作放到sql语句中,然后登陆mysql,通过source执行该sql文件,为了做好相关记录,方便以后的工作中 ...

  5. [渗透攻防] 四.详解MySQL数据库攻防及Fiddler神器分析数据包

    这是最近学习渗透和网站攻防的基础性文章,前面文章从数据库原理解读了防止SQL注入.SQLMAP的基础用法.数据库差异备份.Caidao神器.这篇文章将详细讲解MySQL数据库攻防知识,有点类似第一篇文 ...

  6. mysql 编辑数据库内容_详解mysql数据库增删改操作

    插入数据 insert into 表名(列名1,列名2,列名3) values(值1,值2,值3); insert into user(user_id,name,age) values(1,'nice ...

  7. SQL数据库不用SQL语句能显示全表的内容_详解mysql数据库sql优化技巧总结

    概述 关于SQL优化的教程很多,但是比较杂乱.所以抽空整理了一下,也写出来跟大家分享一下.以下主要针对MySQL数据库,Oracle数据库也可以参考. 优化技巧总结 1.建索引 对查询进行优化,要尽量 ...

  8. 详解MYSQL数据库密码的加密方式及破解方法(1)

    转自 http://hi.baidu.com/davice_li/blog/item/5f5b470be3307e32b0351db5.html MySQL数据库用户密码跟其它数据库用户密码一样,在应 ...

  9. mysql insert和update_详解MySQL数据库insert和update语句

    用于操作数据库的SQL一般分为两种,一种是查询语句,也就是我们所说的SELECT语句,另外一种就是更新语句,也叫做数据操作语句.SQL语句中的更新语句update是最常用的语句之一,言外之意,就是对数 ...

最新文章

  1. Denoising DNA deep sequencing data—high-throughput sequencing errors and their correction
  2. STM32F103 SPI flash操作注意事项
  3. ios fixed定位后内容不显示_HTMLCSS学习笔记(七)-- 定位与锚点
  4. IOS 获取农历方法(转)
  5. html如何做卷展菜单,3DMax“对象属性”卷展栏如何操作?有啥秘诀呢?
  6. 【Elasticsearch】 Kibana 里程碑插件的使用
  7. 别在最吃苦的年龄选择了潇洒
  8. 1064. 朋友数(20)-PAT乙级真题 Java
  9. Android中Bitmap,byte[],Drawable相互转化
  10. Android 秒级编译 Freeline
  11. 请教大家, 关于 $0118 号消息
  12. Java性能调优面试题及答案(性能优化面试题)
  13. 小白如何快速入门数学建模
  14. HUAWEI内网最新发布了一份452页网络协议手册,GitHub一夜霸榜
  15. 插值法综合实例用matlab解决,matlab 插值法
  16. 计算机各个硬盘分区名称不见了,开机后电脑硬盘分区突然消失了,文件都不见了还能找回吗?...
  17. 神仙道玄奇套装材料大全
  18. 计算机视觉:视频分解图片和图片合成视频
  19. 编程实现在IntAct数据集上批量查找蛋白交互对
  20. linux解除用户锁,linux禁用锁定和解除解锁用户账号的方法

热门文章

  1. 小米开源文件管理器MiCodeFileExplorer-源码研究(1)-2个模型Model
  2. 【转】计算机人工智能技术纵览---入门部分
  3. MAT插件分析内存泄露之二
  4. Delphi在代码编辑栏按回车无法换行
  5. HDU1572 下沙小面的(2)【全排列】
  6. Bailian3703 寻找平面上的极大点【最值】
  7. JSK-217 阶乘【大数】
  8. POJ NOI0105-40 数1的个数
  9. I00027 Java语言程序-打印九九乘法表
  10. Java 并发 —— yield/sleep、wait/notify、join