[點晴永久免費OA]如何解決并發的問題(SQL鎖的使用)
當前位置:點晴教程→點晴OA辦公管理信息系統
→『 經驗分享&問題答疑 』
--設tb(A,B,C)
create table #tb(A varchar(2),B varchar(2),C varchar(2)) insert into #tb select ''a1'',''b1'',''c1'' union all select ''a2'',''b2'',''c2'' union all select ''a3'',''b3'',''c3'' /********** 加鎖 *************** 設table1(A,B,C) A B C a1 b1 c1 a2 b2 c2 a3 b3 c3 1)排它鎖 新建兩個連接 在第一個連接中執行以下語句 begin tran update table1 set A=''aa'' where B=''b2'' waitfor delay ''00:00:30'' --等待30秒 commit tran 在第二個連接中執行以下語句 begin tran select * from table1 where B=''b2'' commit tran 若同時執行上述兩個語句,則select查詢必須等待update執行完畢才能執行即要等待30秒 2)共享鎖 在第一個連接中執行以下語句 begin tran select * from table1 holdlock -holdlock人為加鎖 where B=''b2'' waitfor delay ''00:00:30'' --等待30秒 commit tran 在第二個連接中執行以下語句 begin tran select A,C from table1 where B=''b2'' update table1 set A=''aa'' where B=''b2'' commit tran 若同時執行上述兩個語句,則第二個連接中的select查詢可以執行 而update必須等待第一個連接中的共享鎖結束后才能執行 即要等待30秒 3)死鎖 增設table2(D,E) D E d1 e1 d2 e2 在第一個連接中執行以下語句 begin tran update table1 set A=''aa'' where B=''b2'' waitfor delay ''00:00:30'' update table2 set D=''d5'' where E=''e1'' commit tran 在第二個連接中執行以下語句 begin tran update table2 set D=''d5'' where E=''e1'' waitfor delay ''00:00:10'' update table1 set A=''aa'' where B=''b2'' commit tran 同時執行,系統會檢測出死鎖,并中止進程 該文章在 2020/3/3 1:49:14 編輯過 |
關鍵字查詢
相關文章
正在查詢... |