mysql本身是没有sequence的但是我可以自己建立sequence存储过程.
首先我们先建立相关的表,和存储过程.
第一步是创建规则表.
drop table if exists `seq`;
create table `seq` (
`id` bigint(11) not null auto_increment,
`name` varchar(255) not null comment 'sequence名称',
`max` bigint(11) not null default '1' comment '最大id',
`length`int(2) not null default '1' comment '生成序列后的长度,以0补全',
`next` int(2) not null default '1' comment '增长的长度',
`rules` varchar(255) default null comment '规则以###max_id###做为替换',
primary key (`id`),
unique key `fk_name` (`name`)
) engine=innodb auto_increment=1 default charset=utf8;
第二步是创建sequence方法.计算方法.
drop function if exists bj;
delimiter $
create function bj (seq_name varchar(50))
returns varchar(20)
contains sql
begin
declare seq_rules varchar(255);
declare seq_length int(2);
declare seq_max bigint(20);
declare max_id_length int(20);
declare max_id varchar(20);
select rules,seq.`length`,`max` into seq_rules, seq_length,seq_max from seq where name = seq_name ;
set max_id = seq_max;
set max_id_length = character_length(max_id);
#长度不够补0
while seq_length > max_id_length do
set max_id = concat('0',max_id);
set max_id_length = character_length(max_id);
end while;
#替换规则
if seq_rules is not null and instr(seq_rules,'###max_id###') > 0 then
set max_id = replace(seq_rules,'###max_id###',max_id);
end if;
return max_id;
end$
delimiter ;
第三步是创建sequence方法.调用方法.
drop function if exists nextval;
delimiter $
create function nextval (seq_name varchar(50))
returns varchar(20)
contains sql
begin
update seq set `max` = `max` + next where name = seq_name;
return bj(seq_name);
end$
delimiter ;
好上边没问题了 我们建立几条测试数据看看。
#纯数字序列
insert into `seq` (`name`,`max`,`length`,`next`,`rules`) values ('seq_test1', '0', '1', '1', null );
#带有规则序列
insert into `seq` (`name`,`max`,`length`,`next`,`rules`) values ('seq_test2', '0', '3', '2','seq###max_id###');
select nextval('seq_test1');
select nextval('seq_test2');
分享到:
相关推荐
下面小编就为大家带来一篇基于Mysql的Sequence实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
mysql实现sequence功能 1.建立sequence记录表 CREATE TABLE `sys_sequence` ( `seq_name` varchar(50) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, `min_value` int(11) NOT NULL, `max_value` int(11)...
NULL 博文链接:https://snowelf.iteye.com/blog/575555
/// <reference path='./node_modules/mysql-sequence-ts/mysql-sequence-ts.d.ts'> 安装 npm i mysql-sequence-ts 生成库文档 npm run-script generate-docs #未来 1. Fix docblock in current files and ...
mysql中实现sequence.pdf
mysql-序列 nodejs的mysql序列生成器
主要介绍了在MySQL中创建实现自增的序列(Sequence)的教程,分别列举了两个实例并简单讨论了一些限制因素,需要的朋友可以参考下
在Oracle数据库中,sequence等同于序列号,每次取的时候sequence会自动增加,一般会作用于需要按序列号排序的地方。 1、Create Sequence (注释:你需要有CREATE SEQUENCE或CREATE ANY SEQUENCE权限) CREATE ...
sequence-diagram-js 所需jar包,其中sequence-diagram-js支持自定义颜色
Sequence to Sequence Learning with Neural Networksv论文PDF版
机器学习之sequence to sequence learning。(Sequence Generation-----Hung-yi Lee 李宏毅.ppt)
为此,利用文本语言特征改善输入的特性,同时引入拷贝机制缓解摘要生成过程未登录词问题。在此基础上,提出基于Sequence-to-Sequence模型的新方法Copy-Generator模型,以提升文本摘要生成效果。采用中文摘要数据集...
在Oracle数据库移植过程中,sequence可能失效,本资源可使失效的sequence重新恢复作用
SequenceDiagram-3.0.5.zip
Edward Grefenstette - Beyond Sequence to Sequence with Augmented RNNs
A method for assembly sequence planning is proposed in this paper. First, two methods for assembly sequence planning are compared, which are indirect method and direct method. Then, the limits of the ...
以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环....
sequence-to-sequence-learning-with-neural-networks.