数据库事务和锁:事务的死锁



在平时项目中碰到过好几次事务(transaction)死锁情况相信用过事务朋友都有过类似问题下面来写写事务死锁

死锁般由数据库锁造成事务锁有两种是最常遇到种是共享锁(S)种是排他锁(X)简单说共享锁就是在读数据时加排他锁就是在又读又写时加不过可以用NOLOCK来对加了排他锁数据进行读取如果在某个事务中某个锁或者某些锁没有正常释放时就会发生死锁很常见种情况是在个事务中某个SQL语句发生了而导致没有正常结束所以没有执行到出错代码段后面commit或者rollback时这个事务中锁就不会被释放从而造成事务死锁死锁现象很明显就是在执行SQL语句数据库会直执行而没有响应

在发生死锁时要先找到这个事务进程ID然后再kill这个进程般就能解决在SQLServer里可以用sp_lock查看进程状态和ID然后再用kill命令来杀死这个进程当然如果数据库服务器服务不多时并且很好启动时可以简单重启服务来解决

当然除了共享锁和排他锁事务还有其他类型大家可以去下面这个地址看看很详细

http://technet.microsoft.com/zh-cn/library/ms175519(SQL.90).aspx
Tags:  什么是死锁 oracle死锁 数据库死锁 数据库事务和锁

延伸阅读

最新评论

发表评论