MySQL实现类似Oracle的序列 - sequence
来源:互联网 发布:照片设计发型软件 编辑:程序博客网 时间:2024/06/01 10:17
1. 介绍
想要将不能自增的类型作为主键,或者想要自定义主键增长规则,这在MySQL是没有原生支持的
但是想要模拟实现一个其实并不复杂,思路如下:
首先,定义一张表sequence,每一行记录就可以作为一个序列,然后在字段上定义当前值、自增规则;
接着,定义一个next函数,用来获取下一个可用的自增主键
2. 实现
总体结构图:
建立sequence table
drop table if exists cm_sequence;/*==============================================================*//* Table: 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。';
三个函数
func_currval:获取当前序列的值并返回
drop function if exists func_currval;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;
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;
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;
调用
SELECT func_nextval('xxx');
0 0
- MySQL实现类似Oracle的序列 - sequence
- MySQL实现类似Oracle的序列
- MySQL实现类似Oracle的序列
- MySQL实现类似Oracle的序列
- MySQL实现类似Oracle的序列
- MySql中实现类似Oracle的Sequence方案
- MySQL实现ORACLE序列(Sequence)的解决方案
- mysql实现oracle的sequence
- Mysql实现序列sequence
- MySQL模拟Oracle序列sequence
- mysql类似oracle的row_number实现
- MySQL实现类似Oracle的row_number效果
- MySQl里类似Oracle rownum的实现
- oracle的sequence的序列
- 通过创建序列来实现ORACLE SEQUENCE的简单介绍
- Oracle里的序列sequence
- Oracle和Mysql分别生成sequence序列
- mysql实现oracle sequence功能
- 探索 OpenStack 之(8):Neutron 深入探索之 OVS + GRE 之 完整网络流程 篇
- BZOJ 4537: [Hnoi2016]最小公倍数
- 对tableview进行操作
- c++ memset、memcpy函数
- 利用ViewFlipper实现实际应用中banner的自动滑动和手动滑动结合。
- MySQL实现类似Oracle的序列 - sequence
- 【poj1185】 炮兵阵地 题解&代码(C++)
- mysqli属性方法详解:
- WebDriver-------页面中的滚动条怎么滚动,并对隐藏的元素赋值
- Effective Object C 2.0——对象、消息和运行期
- UML建模学习4:UML基本构造块之图
- 第4周 C语言及程序设计提高例程-6 参数传递方式:传值与传地址
- 安卓布局
- ubuntu14.04搭建scikit-learn环境及pydev