多用户操作一个数据表时的并发性操作

我们写一个数据库表时一般都是单用户的。这个问题不大会发现。

假如 Trans结构如下

     *  TicID

         TicBH

         TicDate

我们调用ProcAddTicID

New

      TicID = PPrcAddTicID.upd()

      ....

     

EndNew

PPrcAddTicID:

Rules: out:&TicID

Source:

for each  (TicID)

    &TicID = TicID + 1

    exit

    when none

        &TicID = 1

endfor

当单用户执行时ProcAddTicID,我们发现没有任何问题。TicID 为递增的整数。但是我们发现如果多用户(多个电脑,客户端)同时操作ProcAddTicID时,我们就会发现有时写数据库表时,数据就写不进去了。

这是为什么呢?

         原因很简单?当第一用户写的时候,假设得到最大值 PPrcAddTicID.upd() 的值 为20,还没有执行数据库提交。而这个时候,第2个,第3个。。。用户得到的PPrcAddTicID.upd() 的值 仍然为20。所以只有第一个用户才能写到数据库中,其他用户不能写到数据库了。

为了更好的处理这种并发操作性,我总结了一个非常好的方法,在实际中也是这么应用的。

我们只要判断如果重复数据了,就继续执行得到最大值,直到写成功为止。

我们修改一下原来的程序就可以了。

ProcAddTicID:

do  'New'  //调用过程

Sub 'New' 

       New

                   TicID = PPrcAddTicID.upd()

                      ....

     

                   //修改在这里了

                  when duplicate//当重复了继续执行

                  do ‘New’

         EndNew

EndSub

这样就很好的解决了并发性的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值