`
qq_23269693
  • 浏览: 9286 次
社区版块
存档分类
最新评论

防跳号的两种方式

阅读更多

在财务上有一种需求,就是单据号必须连续不能中断.
这种需求用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;

 

SpringMVC+mybatis HTML5 全新高大尚后台框架_集成代码生成器

5
8
分享到:
评论

相关推荐

    自动跳号的存储过程 自动跳号的存储过程

    根据提供的信息,我们可以深入探讨如何实现一个自动跳号的存储过程。...这种方式不仅能够确保流水号的唯一性,还能根据业务需求灵活定制流水号的格式。开发者可以根据实际应用的需求进一步扩展和完善这一基础框架。

    SAP跳号处理

    SAP财务凭证的跳号查询处理方法。具体参阅文档。。。。

    自动跳号的函数和存储过程

    在数据库管理中,"自动跳号"通常指的是序列(Sequence)或者自增(Auto-Increment)功能,这种机制用于在插入新记录时自动为某个字段生成唯一的递增或递减数值。这种技术在数据表的设计中非常常见,尤其是在需要唯一...

    分享ORACLE SEQUENCE跳号总结

    在ORACLE数据库中,序列(SEQUENCE)是使用非常频繁的一个数据库对象,但是有时候会遇到序列(SEQUECNE)跳号(skip sequence numbers)的情形,那么在哪些情形下会遇到跳号呢?  事务回滚引起的跳号  不管序列有...

    分段连续数字跳号查找

    在计算机科学领域,"分段连续数字跳号查找"是一种优化的查找算法,它主要针对包含多个连续数字段的数据结构,比如序列或者数组。这种查找方法尤其适用于处理那些数字序列中存在跳跃或不连续性的场景,例如电话号码、...

    条码打印防重复软件

    防重复打印条码在线检查软件 :ROC300主要用来检测打印的条码是否可扫描,是否存在重号、漏号、 错号、跳号、超过范围等多种不良现象。实现条码打印及检测自动化,提高标签打印质量及效率、减少条码标签打印错误。

    word 2010 设置标题样式 编号 以及图片编号

    标题样式是Word中预定义的一组格式设置,包括字体、字号、颜色、对齐方式等,主要用于区分文档的不同级别或部分。在Word 2010中,内置了多种标题样式,如“标题1”、“标题2”等,它们按照级别的递减有不同的字体...

    财务会计及凭证样本管理知识分析格式.docx

    记账凭证有三种形式:收款凭证、付款凭证和转账凭证,以及单式和复式两种编制方式。记账凭证的格式可以是专用或通用,小型企业可能使用统一格式的通用凭证。编号是记账凭证管理的重要环节,通常按月连续编号,可采用...

    (2021-2022)年专题资料当前银行内部控制出现的新问题及对策上.doc

    例如,储蓄单折跳号使用、流水账页短缺、异地通兑业务电话核对记录不全等。为解决这一问题,银行需要加强对员工的技术培训,提高其业务熟练程度,并定期更新和完善内部控制流程,确保各项操作规程得到有效执行。 2....

    3d组选必出2码.zip

    如果胆码正确,即使只有两个数字命中,也可能通过这种方式获得收益。 2. **热号与冷号分析**:根据历史开奖数据,分析出现频率较高的“热号”和较少出现的“冷号”,以此作为选号参考。如果选定的两个号码是近期...

    STO配置[汇编].pdf

    但是,需要注意的是跳号问题,跳号问题可能会在服务器断电等突发情况下出现。为了避免跳号问题,可以在 Tcode:SNRO 中选择 EDIT->Set-up buffering->no buffering。 其次,让我们来说说 PO 类型的建立。PO 类型可以...

    可编程控制器练习题.doc

    2. 行程开关和按钮是两种不同的低压电器。行程开关是通过机械碰撞自动切换触点,而按钮则依赖手动操作。 3. 文字符号如KA通常代表中间继电器,而SQ代表行程开关。图形符号用于电气原理图中识别不同的电器元件。 4....

    上海地铁车站值班员理论考试习题集qwq.doc

    10. **书面命令管理**:书面命令号应连续使用,避免跳号、漏号和重号,以保证命令的唯一性和可追踪性。 11. **特殊运行方式**:在某些情况下,如车站不具备乘客乘降条件或列车延误导致拥堵,可能会采取载客通过或...

    后勤集团票据使用管理规定.docx

    1. **票据定义**:规定中明确了四种类型的票据,包括内部票据(集团内部使用)、税票(国家规定样式)、资金往来收据(事业单位收费凭证)和复写收据(收款凭证)。 2. **管理机构**:集团财务部是票据的唯一管理...

    转储配置.pdf

    在这里,我们可以定义 PO 编号的前两位数字和采购物料的内部编号相同。同时,我们也可以设置 PO 编号的范围,使其符合企业的需求。 2. PO 类型的设置 在 SAP 系统中,PO 类型的设置是通过 Tcode:OMEU 完成的。在...

    土木工程施工网络计划技术PPT教案.pptx

    【土木工程施工网络计划技术】是土木工程领域中一种重要的进度管理方法,它通过图形化的方式描绘出工程项目的工作流程,以便更有效地安排和控制施工进度。网络计划技术包括了多个基本概念,如网络图、网络计划、双...

    打号工技术操作规程.doc

    这是因为跳号和串号可能会导致产品的混淆、损坏或遗失,从而影响生产的正常进行。 3. 己完成打号的衣片处理 己完成打号的衣片,要与配料整齐捆放,并按规定的位置摆放,不得乱丢乱扔,以免查找困难。这是因为衣片...

    上海地铁车站值班员理论考试习题qwq.doc

    3. 闭塞法:电话闭塞法是一种行车闭塞法,利用电话记录办理闭塞手续,但路票不是列车占用区间的唯一凭证,而且在实施电话闭塞法时,区间空闲确认应由行车调度员负责。 4. 联络线、折返线和存车线:联络线用于列车...

    打号工技术操作规程(制度范本、DOC格式).doc

    在这个过程中,打号工人需要严禁出现跳号、严禁出现打到面料正面和串号等现象。这是因为跳号和串号等现象可能会导致产品的废弃和质量不合格。 在实际操作中,打号工人需要严格按照操作规程进行打号,避免出现跳号和...

Global site tag (gtag.js) - Google Analytics