[点晴永久免费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 编辑过 |
关键字查询
相关文章
正在查询... |