请问一个有关死锁的问题
请问: 一个事务从开始到结束时间太长的话其它的进程去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
------解决方案--------------------你应该了解一下什么是死锁什么是阻塞?!
死锁一定会阻塞,但是阻塞不一定是死锁!