實現乙個使用者取過的資料不被其他使用者取到

2022-02-25 02:21:34 字數 1076 閱讀 7911

實現乙個使用者取過的資料不被其他使用者取到:

問題:

在用ado訪問資料庫時,從乙個表中取一定的記錄(比如20行),取出後在程式中使用,使用完後刪除掉記錄(不用更新或刪除記錄)。在多使用者操作下(每個使用者採用相同的操作),如何保證乙個使用者已選取的記錄不被其他使用者選取?

解決方法:

處理此類問題的一般方法是增加乙個標誌列,每個使用者取的記錄設定乙個標誌,新的使用者只從標誌為未取的記錄中獲取記錄。

在本文中將會利用事務與鎖來控制資料的處理,不需要增加任何標誌列。

解決的具體示例:

1.建立測試環境

use tempdbgo 

create 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天後,我心中的巨人,因為遇見一些事情後,被召喚醒了。我向來都不是那種一點就通,一點就過得人,有時候,乙個簡簡單單的問題,我都...