取過的資料時不被其他使用者取到的實現 資料併發處理

2021-05-03 21:52:27 字數 1024 閱讀 8144

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

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

解決方法:

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

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

解決的具體示例:

1.建立測試環境

use tempdb

go 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行 取出後在程式中使用,使用完後刪除掉記錄 不用更新或刪除記錄 在多使用者操作下 每個使用者採用相同的操作 如何保證乙個使用者已選取的記錄不被其他使用者選取?解決方法 處理此類問題的一般方法是增...

Oracle 訪問其他使用者下的物件

每個使用者都有自己的空間 scott或hr叫使用者名稱 空間名,以下是使用者名稱 密碼 scott tiger hr lion 查詢當前使用者是誰 show user 查詢scott自己表空間下的所有物件時,可加,或不加使用者名稱select from emp select from emp sel...

防止自己製作的光碟被其他使用者複製的辦法

要求 把自己製作的軟體通過加密的方式分發給各單位,要求各單位只能通過光碟執行軟體,使用者不可以單獨把光碟的檔案複製出來執行。需要用到的軟體有ultraiso註冊版 光碟加密大師的註冊版。首先把軟體打包成字尾名.iso的檔案,iso的檔案直接可以通過nero燒錄,很方便,看我截圖 儲存為.iso的檔案...