多用戶操作一個數據表時的併發性操作

我們寫一個數據庫表時一般都是單用戶的。這個問題不大會發現。

假如 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

 

這樣就很好的解決了併發性的問題。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章