关于数据库死锁

死锁:读取一个表的时候加的是 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才出现了死锁.如果两者顺序一致.还会不会出现死锁?答案是: 不会!
解决死锁:让操作表的顺序一致,就能减少死锁的概率.(当然这是最低级别的代码级别) 因为当高访问量来的时候,依然死锁.(这个就不说.以后再说)

转载于:https://www.cnblogs.com/henhaoji/p/3182909.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值