关于数据库死锁-----(转)

死锁:读取一个表的时候加的是 S锁(共享锁)
往表写数据或者是修改、删除数据:X锁
 
数据库中死锁出现以及解决 
about死锁:
        读取一个数据的时候,加的是S锁(共享锁) 只允许读,不允许其他人进行修改
        往表写数据或修改,删除一个数据的时候,加的是X锁(排他锁)   由数据库自动加 
        当X锁锁定的时候,其他锁必须等.必须等到X锁运行完了之后,释放.才能由S锁之类的来运行
 
select * from dbo.Articel_Words with(nolock)
 
当数据在写入 修改 删除的时候,会给数据库中的数据,添加上一个X锁(排他)
这个排他锁在释放之前,数据不能被其他人读取访问.也就是说S锁想加上去,加不上.必须等到没有锁或者X锁释放之后
但是,有一种特例.那就是with(nolock)在读取语句结尾时,会无视排他锁的存在...但是,查出来的数据,有可能是脏数据.
为什么?因为数据有可能还会回滚...这就是SqlServer中的锁
 
什么时候能产生死锁?
    甲乙二人 都要访问 ab二表
    甲有a表的锁,等b表的锁
    乙有b表的锁,等a表的锁
    ====死锁.都在等....对方的释放
这个时候,sqlserver就出现了,sqlserver有一个死锁检索机制.它解决死锁的策略就是牺牲一方,让另一方执行下去.
死锁的危害,只要产生死锁.只要出现死锁,整个程序整个卡住,所有程序全部卡死.
 
具体怎么解决?  从操作顺序来解决.甲是先a再b,乙是先b再a才出现了死锁.如果两者顺序一致.还会不会出现死锁?答案是:不会!
解决死锁:让操作表的顺序一致,就能减少死锁的概率.(当然这是最低级别的代码级别) 因为当高访问量来的时候,依然死锁.
posted @ 2014-03-20 16:09  行进  阅读(171)  评论(0编辑  收藏  举报