MySQL的又一神器-锁,MySQL口试必备
SELECT ... FOR UPDATE: 会对查询的行及相干联的索引记录加X锁,其他事宜哀求的S锁或X锁城市被阻塞。 当事宜提交或回滚后,通过这两个语句添加的锁城市被开释。 留意:只有在自动提交被禁用时,SELECT FOR UPDATE才可以锁定行,若开启自动提交,则匹配的行不会被锁定。 #### 同等性非锁定读 同等性非锁定读(consistent nonlocking read) 是指InnoDB存储引擎通过多版本节制(MVVC)读取当前数据库中行数据的方法。假如读取的行正在执行DELETE或UPDATE操纵,这时读取操纵不会因此去守候行上锁的开释。相反地,InnoDB会去读取行的一个快照。以是,非锁定读机制大大进步了数据库的并发性。 同等性非锁定读是InnoDB默认的读取方法,即读取不会占用和守候行上的锁。在事宜断绝级别READ COMMITTED和REPEATABLE READ下,InnoDB行使同等性非锁定读。 然而,对付快照数据的界说却差异。在READ COMMITTED事宜断绝级别下,同等性非锁定读老是读取被锁定行的最新一份快照数据。而在REPEATABLE READ事宜断绝级别下,则读取事宜开始时的行数据版本。 下面我们通过一个简朴的例子来声名一下这两种方法的区别。 起首建设一张表; 插入一条数据;
查察断绝级别;
下面分为两种事宜举办操纵。 在REPEATABLE READ事宜断绝级别下; 在REPEATABLE READ事宜断绝级别下,读取事宜开始时的行数据,以是当会话B修改了数据之后,通过早年的查询,照旧可以查询到数据的。 在READ COMMITTED事宜断绝级别下; 在READ COMMITTED事宜断绝级别下,读取该行版本最新的一个快照数据,以是,因为B会话修改了数据,而且提交了事宜,以是,A读取不到数据了。 5 行锁的算法 InnoDB存储引擎有3种行锁的算法,其别离是:
Record Lock:老是会去锁住索引记录,假如InnoDB存储引擎表在成立的时辰没有配置任何一个索引,那么这时InnoDB存储引擎会行使隐式的主键来举办锁定。 Next-Key Lock:团结了Gap Lock和Record Lock的一种锁定算法,在Next-Key Lock算法下,InnoDB对付行的查询都是回收这种锁定算法。举个例子10,20,30,那么该索引也许被Next-Key Locking的区间为: 除了Next-Key Locking,尚有Previous-Key Locking技能,这种技能跟Next-Key Lock正好相反,锁定的区间是区间范畴和前一个值。同样上述的值,行使Previous-Key Locking技能,那么可锁定的区间为: 不是全部索引城市加上Next-key Lock的,这里有一种非凡的环境,在查询的列是独一索引(包括主键索引)的环境下,Next-key Lock会降级为Record Lock。 接下来,我们来通过一个例子表明一下。
我们此刻会话A中执行如下语句;
(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |