日期:2014-05-20  浏览次数:20531 次

请问一个有关死锁的问题
请问: 一个事务从开始到结束时间太长的话其它的进程去update或insert这张表的时候是不是会产生互锁? 同样去select这张表时会不会产生超时?  
还有一个问题就是   产生死锁是不是都是因为事务所产生的?

------解决方案--------------------
看你锁定的形式.是表锁定还是行锁定.
------解决方案--------------------
举个死锁的例子给你看看:

-- 测试环境
USE tempdb
GO
CREATE TABLE t1(id int)
INSERT t1 VALUES(1)
CREATE TABLE t2(id int)
INSERT t2 VALUES(2)
GO

-- 查询窗口1中执行下面的语句
USE tempdb
GO
BEGIN TRAN
SELECT * FROM t1 WITH(TABLOCKX)
WAITFOR DELAY '00:00:10 '
UPDATE t2 SET id = 1
COMMIT TRAN
GO

-- 查询窗口2中执行下面的语句
USE tempdb
GO
BEGIN TRAN
SELECT * FROM t2 WITH(TABLOCKX)
WAITFOR DELAY '00:00:10 '
UPDATE t1 SET id = 1
COMMIT TRAN
GO


-- 测试完成后删除测试环境
DROP TABLE t1, t2

------解决方案--------------------
你应该了解一下什么是死锁什么是阻塞?!

死锁一定会阻塞,但是阻塞不一定是死锁!