實現乙個使用者取過的資料不被其他使用者取到:
問題:
在用ado訪問資料庫時,從乙個表中取一定的記錄(比如20行),取出後在程式中使用,使用完後刪除掉記錄(不用更新或刪除記錄)。在多使用者操作下(每個使用者採用相同的操作),如何保證乙個使用者已選取的記錄不被其他使用者選取?
解決方法:
處理此類問題的一般方法是增加乙個標誌列,每個使用者取的記錄設定乙個標誌,新的使用者只從標誌為未取的記錄中獲取記錄。
在本文中將會利用事務與鎖來控制資料的處理,不需要增加任何標誌列。
解決的具體示例:
1.建立測試環境
use tempdbgocreate table dbo.tb(
id int identity(1, 1),
name nvarchar(128))
insert tb(name)
select top 100
name
from syscolumns
go
2.模擬第1個使用者
-- 查詢視窗發出下面的查詢語句begin tran
-- 事務不提交或者回滾, 以保持鎖不釋放
set rowcount 20
select *
from tb with(updlock, readpast)
-- updlock 讓鎖保留到事務結束, readpast 跳過已經鎖定的資料
3. 模擬第2個使用者(語句與第1個使用者一樣,只是在另乙個連線中執行)
-- 查詢視窗發出下面的查詢語句begin tran
-- 事務不提交或者回滾, 以保持鎖不釋放
set rowcount 20
select *
from tb with(updlock, readpast)
-- updlock 讓鎖保留到事務結束, readpast 跳過已經鎖定的資料
4.結果
此時就實現了不同的使用者取不同資料的需求.
注釋::在 處理完成後, 刪除記錄, 然後提交事務就可以了。
取過的資料時不被其他使用者取到的實現 資料併發處理
實現乙個使用者取過的資料不被其他使用者取到 問題 在用ado訪問資料庫時,從乙個表中取一定的記錄 比如20行 取出後在程式中使用,使用完後刪除掉記錄 不用更新或刪除記錄 在多使用者操作下 每個使用者採用相同的操作 如何保證乙個使用者已選取的記錄不被其他使用者選取?解決方法 處理此類問題的一般方法是增...
實現乙個不被乾掉的Service
1.就是實現乙個不被乾掉的service。2.我是實現對簡訊的監聽的,使用了靜態註冊後,退出activity是可以監聽,可是被清除快取後 長按home鍵位清除 就沒有反應了。有沒有好的方法?每次呼叫startservice intent 的時候,都會呼叫該service物件的onstartcomma...
做乙個不被熟知的自己
第一篇部落格,大學最後一年了,越來越明白,自己的需求是什麼。就好像在軟體在被開發設計時候,明白自己的需求是什麼,才可以更好的用 來實現,要實現的功能。在2019年已經過去的37天後,我心中的巨人,因為遇見一些事情後,被召喚醒了。我向來都不是那種一點就通,一點就過得人,有時候,乙個簡簡單單的問題,我都...