MySQL InnoDB锁先容及差异SQL语句别离加什么样的锁
到此为止,MySQL InnoDB 8种范例的锁我们就先容完了。我们以一个例子竣事8种范例的先容。 T1先执行,事宜ID是8428;T2后执行,事宜ID是8429 上图演示了:
performance_schema.data_locks表中并不能看到T2的所有锁,好比,T2也得在iux_b上配置insert intention lock,但,performance_schema.data_locks中并没有这个锁。关于performance_schema.data_locks中表现了哪些锁,请见本文最后一段。 把这些锁及其范畴列出来如下图所示 四、差异的SQL加了什么样的锁? OK,我们已经相识了InnoDB各类差异范例的锁,那么,差异SQL语句各加了什么样的锁呢 我们用最朴实的设法来思索一下,用锁作什么呢?锁要作的就是到达事宜断绝的目标,即:两个并发执行的事宜T1和T2,假如T1正在修改某些行,那么,T2要并发 读取/修改/插入 满意T1查询前提的行时,T2就必需被阻塞,这是锁存在的基础缘故起因。index record lock, gap lock, next-key lock都是实现本领,这些本领使得锁既能到达目标,还能实现最大的并发性。以是,当我们思量事宜T1中的SQL上加了什么锁时,就想一下,当T1执行时,假如并发的事宜 T2不会触及到T1的行,则T2无需被阻塞,假如T2的要 读取/修改/插入 满意T1前提的行时,T2就得被T1阻塞。而T1阻塞T2的详细实现就是:T1在已存在的行上加index record lock使得T2无法触碰已存在的行,以及,T1在不存在的行上加gap lock使得T2无法插入新的满意前提的行。 前面我们说过“加什么样的锁”与以下身分相干
我们来看一下,差异的断绝级别下,行使差异的索引时,别离加什么锁。在接头之前,我们先剔除无需接头的环境 起首,平凡SELECT 行使同等性非锁定读,因此基础不存在锁。无需接头; 再者,作为开拓者,我们险些从来不会行使到断绝级别RU和Serializable。这两个断绝级别无需接头。 于是,剩下的就是 给定锁定读SELECT或DML(INSERT/UPDATE/DELETE)语句,在差异断绝级别下,行使差异范例的索引时,别离会加什么样的锁?直接给出谜底,其加锁原则如下 (一)、RR时,假如行使非独一索引举办搜刮或扫描,则在所扫描的每一个索引记录上都配置next-key lock。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |