许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  LS-DYNA中如何设置SET中的NODE_LIST:MySQL数据库实现类似Oracle序列的详解

LS-DYNA中如何设置SET中的NODE_LIST:MySQL数据库实现类似Oracle序列的详解

阅读数 5
点赞 0
article_banner

概述

众所周知,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函数,用来获取下一个可用的自增主键
2a1fae274556d5e7b7d4bccc302fbee9.png

总体结构图

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。';
50f2667ac1f2c0aa2a7c4a6b364f1b43.png

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;
9c12103807f8d96afca1cc25310b7187.png

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;
adf53c19e7dd825f0845f4a28e6581c2.png

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;
c7ae1546149204adb408bb46a598fa51.png

3、调用

调用命令如下:

SELECT func_nextval('xxx');
2a6a9266de9d905ddcef4df6247ef33c.png

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


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空