在财务上有一种需求,就是单据号必须连续不能中断.
这种需求用Oracle的序列不能实现,MySQL的auto_increment也不能实现.
因为事务回滚,或者实例重启,都可能造成单据号不连续的情况,就是跳号.
防止跳号有两种方式,但是前提都是不能删除数据.
第一种方式,用锁限制并发.
一个表有两个字段,一个是模块名称,一个是当前模块的序列值
create table tab_lock
(
module_name varchar(10) primary key,
current_value int
)engine=innodb;
insert into tab_lock values('HR',1),('IT',1);
commit;
使用的时候,用悲观锁锁住这行数据,然后使用这个值填充主键,最后让这个序列自增.
select * from tab_lock
where module_name='IT' for update;
update tab_lock
set current_value=current_value+1
where module_name='IT';
commit;
这种方式限制了并发.
一旦回滚,这个号码没有任何变化.这样可以保证单号的连续性.
-------------------------------------------------------------------------
还有一种方式,就是使用一个伪列作为单号.
主键不连续,而伪列单号可以连续.
create table order_log
(
id int primary key
)engine=innodb;
insert into order_log
values
(1),(2),(4),(5),(7),(10),(13),(17),(20);
commit;
虽然主键不连续,但是可以通过下面的方式使单据号连续.
延迟关联实现分页,每页5条
第一页
select
concat('TX',lpad(b.rn,10,'0')),a.*
from
order_log a
,
(
select * from
(
select
id,
@a := @a + 1 AS rn
from order_log,
(SELECT @a := 0) t order by id limit 5
) c where rn>0
) b
where a.id=b.id;
第二页
select
concat('TX',lpad(b.rn,10,'0')),a.*
from
order_log a
,
(
select * from
(
select
id,
@a := @a + 1 AS rn
from order_log,
(SELECT @a := 0) t order by id limit 10
) c where rn>5
) b
where a.id=b.id;
第二种方式显然更好.
两种方式的前提都是不能删除表中数据.
第二种方式其实是
select
concat('TX',lpad(b.rn,10,'0')),a.*
from
order_log a
,
(
select * from
(
select
id,
@a := @a + 1 AS rn
from order_log,
(SELECT @a := 0) t order by id limit ${pageSize}*${pageNum}
) c where rn>${pageSize}*(${pageNum}-1)
) b
where a.id=b.id;
相关推荐
自动跳号的存储过程也就是流水号,我写的这个流水号适合全事件任何一个地方的流水号都包括在内。
自动跳号的函数和存储过程 自动跳号的函数和存储过程
SAP财务凭证的跳号查询处理方法。具体参阅文档。。。。
在ORACLE数据库中,序列(SEQUENCE)是使用非常频繁的一个数据库对象,但是有时候会遇到序列(SEQUECNE)跳号(skip sequence numbers)的情形,那么在哪些情形下会遇到跳号呢? 事务回滚引起的跳号 不管序列有...
分段连续数字跳号查找
防重复打印条码在线检查软件 :ROC300主要用来检测打印的条码是否可扫描,是否存在重号、漏号、 错号、跳号、超过范围等多种不良现象。实现条码打印及检测自动化,提高标签打印质量及效率、减少条码标签打印错误。
NULL 博文链接:https://liuwang126.iteye.com/blog/1388946
支持Access及SQL SERVER两种数据库, 可任意选择。使 用: 纯绿色软件, 无需安装。 第一次运行系统时,必须进行数据库配置(选择使用Access或SQL SERVER数据库)及系统配置。 Bin目录下的ePdm.Bak为SQL SERVER备份文件...
系统之间数据交互生成NC单据,那么单据号的生成可以不填也可以通过代码生成,防止跳号
公文格式——即公文规格样式,是指公文中各个组成部分的构成方式,它和文种是公文外在形式的两个重要方面,直接关系到公文的效用的发挥。包括公文组成、公文用纸和装订要求等。 标题 "关于"要有,公文标题由发文...
今天是2019年第一天,在此祝大家新年快乐,梦想还在路上,让我们继续加油! 应之前的计划,今天完成这篇记录,也借此记录自己...rank() 是排名的函数,该函数组内排序后会进行跳号,分数相同的作为并列。 dense_rank()
比如,连续生成的编号,由于某种操作(通常为删除)后,产生不连续的编号,我们将这种不连续的编号称为断号。
分机忙线跳号 d.分机权限设定 e. 分机状态查看 二.外线数据部份 a.E1外线的设定 Ⅰ.设定E1卡在交换机中的位置 Ⅱ.设定DCH卡的位置 Ⅲ.参数查看DCH资料 Ⅳ.设定E1路由 Ⅴ.在E1上设定E1数据 Ⅵ.查看...
11g导出至10g、密码有效期问题、数据导出不完整、JOB不执行、创建大文件表空间、更改字符集、CPU使用情况、聚簇索引、通过dblink获取lob字段、无法识别本地sid、修复SPFILE文件、序列跳号问题、中文转拼音、自动备份...
1 性能优化 1.1 避免频繁 commit,尤其...说明:除非是单据的单号,要求必须是唯一,并且依据流水号不可以跳号,不然在大量交易的表格中,不在乎跳耗时,要取得唯一的Primary Key 建议使用Oracle Sequence这样速度会较...
一号通 中继线路说明书,描述原理和线路接法 调试密码口令步骤等内容
316 凭证出现跳号 15 317凭证业务日前提交后无法修改 16 318凭证已指定流量在附表调整又要求再次调整 16 319标准凭证引入后希望制单人还是原凭证制单人 16 320凭证引出为模式凭证报错 16 321凭证重排的规则 16 322...