最近開發了乙個公安機關的分布式系統,在系統中要求若干個人同時可以對資料庫進行讀寫操作。這時出現了一些聯想問題:
1 當多於1人的使用者對同一條記錄進行寫操作時,先寫入的使用者的資料必定會被後寫入的使用者的資料override掉,這個問題如何解決?
2 希望看比某一條記錄更新的(在這條記錄修改後,才進行修改和新增的)所有記錄,如何實現(id不連續,記錄時常有更新)?
3 希望看到本行記錄的最新版本,如果有新版本就讀到資料集,如果沒有就不讀到資料集?(行版本戳)
ok,i answer questions whichi put questions to .
1 當多於1人的使用者對同一條記錄進行寫操作時,先寫入的使用者的資料必定會被後寫入的使用者的資料override掉,解決方法:
createproc recordbyjobid @jobid
char(20) ,@stamp
timestamp
output
asbegin
declare
@stamp rowversion --
行版本型別
select
@stamp
=stamp from a where
[jobid]=
@jobid
end--
將取出的stamp以引數的形式傳送給updaterecord過程,去更新記錄。
create
proc
updaterecord
@jobid
char(20
) ,
@stamp
timestamp,
@content
varchar(200)as
begin
--waitfor delay '00:00:15' --等待時間
declare
@count
intselect
@count
=count(*) from[a
]where jobid=
@jobid
if@count=1
begin
update[a
]set
[content]=
@content
where stamp=
@stamp
and jobid=
@jobid
endelse
begin
insert
into[a
](jobid,content)
values
(@jobid,@content)
endend
2 希望看比某一條記錄更新的(在這條記錄修改後,才進行修改和新增的)所有記錄,如何實現(id不連續,記錄時常有更新)解決方法:
create displaylastbystamp @stamptimestamp
asbegin
select cardid,jobid,gid,stamp from a where stamp>
@stamp
end3
希望看到本行記錄的最新版本,如果有新版本就讀到資料集,如果沒有就不讀到資料集。解決方法:
create displaylastbystampjobid @stamp
timestamp,jobid varchar(20) as
begin
select cardid,jobid,gid,stamp from a where jobid=
@jobid
and stamp>
@stamp
end
知方可補不足 目錄
回到佔佔推薦部落格索引 知方可補不足系列主要是對原來的技術進行學習,研究,將之前不確定的東西進行驗證,將專案中正在用到的老技術進行總結。知方可補不足系列主要的範疇是資料庫方面 知方可補不足 說說吧!timestamp有什麼用?知方可補不足 sql巧用xml path來生成符合規則的查詢結果集 知方可...
知方可補不足 UPDLOCK更新鎖的使用
回到目錄 對於高併發的場合下,使用updlock可以有效的控制併發更新的問題,即當乙個執行緒在進行with updlock 並進行update時,另乙個執行緒將被阻塞,它會等第乙個執行緒更新結束後,才可以進行它裡面的操作,使用updlock有效的避免了併發更新而產生的資料錯誤的問題,如累加操作,第二...
知方可補不足 sqlserver中的幾把鎖 續
之前寫過相關的文章,對髒讀,不可重複讀,幻讀都做了相當的研究,而今天在程式中又出現了這個問題,即當一條資料被update時,另乙個執行緒同時發起了讀的操作,這對於序列化級別的事務是不被允許的,正常情況下它應該被阻塞,當事務消失時,資料從新被讀取。更新丟失 兩個事務都同時更新一行資料,乙個事務對資料的...