代码改变世界

事务:共享锁的运用

2010-08-04 11:07  迭_戈  阅读(252)  评论(0编辑  收藏  举报
--user 1
BEGIN TRANSACTION
DECLARE @dt VARCHAR(50)
SELECT * FROM Class_Info  WITH (HOLDLOCK)
/*show time*/
SELECT @dt=CONVERT(VARCHAR,GETDATE(),21)
PRINT 'u1 lock time:'+@dt

WAITFOR DELAY '00:00:15'

SELECT @dt=CONVERT(VARCHAR,GETDATE(),21)

PRINT 'u1 unlock time:'+@dt
COMMIT TRANSACTION


--user 2

BEGIN TRANSACTION
DECLARE @dt2 VARCHAR(50)
SELECT @dt2=CONVERT(VARCHAR,GETDATE(),21)
PRINT 'u2 begin tran:'+@dt2
SELECT * FROM Class_Info

SELECT @dt2=CONVERT(VARCHAR,GETDATE(),21)
PRINT 'u2 begin selct:'+@dt2


DELETE FROM Class_Info WHERE ID=19
SELECT @dt2=CONVERT(VARCHAR,GETDATE(),21)
PRINT 'u2 begin delete:'+@dt2

ROLLBACK  TRANSACTION

 

-----------------------------执行结果---------------------

 


(20 行受影响)
u1 lock time:2010-08-04 10:59:49.780
u1 unlock time:2010-08-04 11:00:04.777

 

u2 begin tran:2010-08-04 10:59:51.077

(20 行受影响)
u2 begin selct:2010-08-04 10:59:51.077
19

(1 行受影响)
DELETE

(1 行受影响)
u2 begin delete:2010-08-04 11:00:04.777