代碼對資料庫的操作是順序進行的,還是同步進行的?
比如一段代碼中對資料庫中同一個表進行了2次順序執行的操作:
先操作A:修改了表中的某些值
再操作B:根據A修改的值進行了查詢操作
代碼執行程序中是等待 操作A對表修改完后再進行操作B,還是操作A的代碼運行了,但是資料庫對表還沒有修改完,代碼就已經執行了操作B呢?
哪位大神知道運行的機制,能否回答一下?
uj5u.com熱心網友回復:
自己去了解下事務 謝謝uj5u.com熱心網友回復:
這個取決于使用技術組合吧,若只是jdbc, 這取決于事務uj5u.com熱心網友回復:
資料庫是死的,它的同步不是靠自己,而是靠外部是如何操作的。例如你說的一致性問題,在之前用SQL是這樣的:改寫資料的時候,需要select x from tablex where id=xx for update ,注意末尾這里有個for update,這樣這行資料就會被鎖定,其他的更新就進不來,這樣就避免了并發的相互覆寫,只有前一個commit之后,后者才能操作這條資料。
但是這還沒完,比如第一個用戶打開的時候,資料內容是a,他準備將他修改為b,在他打開的時候,第二個用戶也打開了這條資料,他發現這條資料必須修改為c,于是他也做了修改,然后他們現后進行了提交,如果不做任何特殊處理,他們都不知道這條資料是從a變為b再變為c、還是先變為c再變為b的。所以以下是完整的做法:
1,在資料結構上增加一個欄位:updatetime(yyyymmddhh24miss)
2,用戶打開資料的時候,當前顯示的內容背后隱藏著這個欄位,就是說打開a的時候,同時還有它的更新時間一起被查詢并保存在客戶端
3,用戶提交a~b的修改的時候,一并將上一步打開的時間一起傳回
4,后臺select x,updatetime from tablex where id=xx for update,之后檢查select出來的時間是否與上一步回傳的時間一致,如果不一致,說明之前有其它客戶端修改了這條資料,如果一致才進行修改,修改的時候同步updatetime到最新的sysdate
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/243383.html
標籤:Java相關
上一篇:小白提問
下一篇:救命!LWJGL報錯!
