鎖定記錄,只允許單使用者修改的例子

2021-04-01 08:01:39 字數 1291 閱讀 9834

--鎖定記錄,只允許單使用者修改的例子:

--建立測試環境

--建立測試表--部門表

create table 部門(departmentid int,name varchar(10))

--記錄鎖定表

create table lock(departmentid int,dt datetime)

go--因為函式中不可以用getdate,所以用個檢視,得到當前時間

create view v_getdate as select dt=getdate()

go--建立自定義函式,判斷記錄是否鎖定

create function f_chk(@departmentid int)

returns bit

asbegin

declare @re bit,@dt datetime

select @dt=dt from v_getdate

if exists(select 1 from lock where departmentid=@departmentid

and datediff(ss,dt,@dt)<5)

set @re=1

else

set @re=0

return(@re)

endgo

--資料處理測試

if dbo.f_chk(3)=1

print '記錄被鎖定'

else

begin

begin tran

insert into lock values(3,getdate())

update 部門 set name='a' where departmentid=3

delete from lock where departmentid=3

***mit tran

end--刪除測試環境

drop table 部門

drop view v_getdate

drop function f_chk

create table #鎖表(編號 int,時間 datetime)

--**:

if exists(select 1 from 編號='你的編號' and datediff(ss,時間,getdate())<5  --如果鎖的時候超過5秒,則是處理超時

) return

delete from #鎖表

insert #鎖表 values('你的編號',getdate())

.....你處理的**

delete #鎖表 where 編號='你的編號'

鎖定資料記錄

鎖定資料記錄ado元件有一個非常好的屬性locktype,可用於鎖定記錄,這樣當一個更新開始之前可以去檢查這個屬性,如果還在鎖定狀態,則需要等待,以避免更新衝突.該屬性具體說明如下 locktype 屬性 指示編輯過程中對記錄使用的鎖定型別。設定和返回值 設定或返回以下某個 locktypeenum...

oracle 記錄被鎖定

select object id,session id,locked mode from v locked object select t2.username,t2.sid,t2.serial t2.logon time from v locked object t1,v session t2 wh...

MYSQL select時鎖定記錄問題

在使用sql時,大都會遇到這樣的問題,你update一條記錄時,需要通過select來檢索出其值或條件,然後在通過這個值來執行修改操作。但當以上操作放到多執行緒中併發處理時會出現問題 某執行緒select 了一條記錄但還沒來得及 update 時,另一個執行緒仍然可能會進來 select 到同一條記...

當前記錄被另一使用者鎖定,解除鎖定

被鎖的原因就是有人在你之前修改記錄,此時oracle會通過事務鎖鎖住這個記錄,而且這個修改記錄的人還沒有提交或回滾記錄,接下來你又試圖修改同一條記錄,你就會被這個事務鎖所阻塞。處理方法很簡單,可以有以下兩種方法 1.找到在你之前修改記錄的那個人,讓他在他的修改記錄的會話裡做一下 commit或rol...

oracle被鎖定的記錄解鎖

下面是我在開發中遇到的一個問題,通過以下的方法很好的解決了,下面部分是我從別的網頁中摘下來的,以防自己忘記。oracal資料庫中的一個表的一條記錄被鎖定,既不能修改也不能刪除 只看到沙漏,等一個小時都是這樣 刪除表物件也不行,報錯 ora 00054 資源正忙,要求指定nowait 解決方法 1 當...