更新时间:2020-07-29 14:29:22 来源:极悦 浏览2100次
数据库是一个软件,是一个很多用户会一起使用的软件。
当多个用户同时的去操作数据库中数据的时候,在数据库中就会产生多个用户去存取同一条数据的情况。如果两个或多个以上的用户在执行的过程中,因争夺资源导致互相等待,并且将一直等待下去,这种情况叫做死锁。
产生死锁的条件
一条数据每次只能被一个用户使用;
一个用户请求资源阻塞时,对已经获得的资源保持不放;
用户已经获得的资源,未使用前,别人不能抢走;
几个用户形成首尾相接的循环等待资源。
几个条件同时发生的时候,就会产生死锁。
比如小明和小红都要做饭,做饭需要铲子和锅(假如铲子和锅各有一个)。
小明拿到了铲子,准备去找锅;
小红拿到了锅,准备去找铲子;
然后他/她俩就僵持住了,每个人都拿着手上的东西不放手,于是就一直僵持下去了。
数据库锁类型
排它锁(X锁):锁上之后,其他用户不能对其查询和修改。
共享锁(S锁):锁上之后,其他用户可以查询,但是不能修改。
常见的产生死锁的原因
对相同的资源,访问顺序不相同:这个好理解吧,上面那个例子就是这个问题。小明做饭先找铲子后找锅,小红做饭先找锅后找铲子。解决的方法也比较简单,就是让他们的顺序保持一致就好了。
索引失效:有时候索引失效导致查询进行了全表扫描,执行全表扫描,会把行级锁上升为表级锁,如果这样的事情发生次数太多,就很容易导致死锁。解决方法也很简单啦,别让索引失效就好了。产生索引失效的原因也有很多,之前我有介绍过。
并发修改同一记录:用户A先查询一条数据,上了共享锁,这时候用户B要修改数据,上了独占锁,赖好不好的,A也要做数据修改了,那么共享锁企图上升为独占锁。这时候,用户B的独占锁要等着A释放共享锁,但是A要做锁升级,还必须等待B释放独占锁,于是出现了死锁。数据库解决这种问题,引入了悲观锁和乐观锁。这里就不展开来说了。
以上就是极悦java培训机构的小编针对“Java数据库项目视频,数据库为什么会产生死锁”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习