数据库两大必备神器:索引和锁底层原理是什么!
张三也对这笔记录修改:update A set Name=lisi,version=version+1 where ID=#{id} and version=#{version},但失败了!由于当前数据库中的版本跟查询出来的版本纷歧致! 4、间隙锁GAP 当我们用范畴前提检索数据而不是相称前提检索数据,并哀求共享或排他锁时,InnoDB会给切合范畴前提的已稀有据记录的索引项加锁;对付键值在前提范畴内但并不存在的记录,叫做“间隙(GAP)”。InnoDB也会对这个“间隙”加锁,这种锁机制就是所谓的间隙锁。 值得留意的是:间隙锁只会在Repeatable read断绝级别下行使~ 例子:若是emp表中只有101笔记录,其empid的值别离是1,2,...,100,101 Select * from emp where empid > 100 for update; 上面是一个范畴查询,InnoDB不只会对切合前提的empid值为101的记录加锁,也会对empid大于101(这些记录并不存在)的“间隙”加锁。 InnoDB行使间隙锁的目标有两个:
5、死锁 并发的题目就少不了死锁,在MySQL中同样会存在死锁的题目。 但一样平常来说MySQL通过回滚帮我们办理了不少死锁的题目了,但死锁是无法完全停止的,可以通过以下的履历参考,来尽也许少碰着死锁: 1)以牢靠的次序会见表和行。好比对两个job批量更新的气象,简朴要领是对id列表先排序,后执行,这样就停止了交错守候锁的气象;将两个事宜的sql次序调解为同等,也能停止死锁。 2)大事宜拆小。大事宜更倾向于死锁,假如营业应承,将大事宜拆小。 3)在统一个事宜中,尽也许做到一次锁定所必要的全部资源,镌汰死锁概率。 4)低落断绝级别。假如营业应承,将断绝级别调低也是较好的选择,好比将断绝级别从RR调解为RC,可以停止掉许多由于gap锁造成的死锁。 5)为表添加公道的索引。可以看到假如不走索引将会为表的每一行记录添加上锁,死锁的概率大大增大。 6、锁总结 上面说了一大堆关于MySQL数据库锁的对象,此刻来简朴总结一下。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |