0
点赞
收藏
分享

微信扫一扫

【Mysql】一致性非锁定读和一致性锁定读

49路末班车 2022-03-18 阅读 65

@TOC

一致性非锁定读

定义:一致性非锁定读(consistent nonlocking read)是指InnoDB存储引擎通过行多版本控制的方式来读取当前执行时间数据库中行的数据。如果读取的行正在执行DELETE或UPDATE操作,这是读取操作不会因此去等待行上锁的释放。相反的,InnoDB存储引擎会去读行的一个快照数据。
事务的隔离级别:READ COMMIT和REPEATABLE READ
在READ COMMIT事务隔离级别下,对于快照数据,非一致性读总是读取被锁定行的最新一份快照数据,而在REPEATABLE READ事务隔离级别下,对于快照数据,非一致性读总是读取事务开始时的行数据版本
其中InnoDB默认为REPEATABLE READ
示例:
在这里插入图片描述
READ COMMIT事务隔离级 : select * from table where id = 1,在6之前,读取的数据id= 1; 在6之后,读取结果为id= 3;
REPEATABLE READ事务隔离级别下: select * from table where id = 1,在6之前和在6之后,读取结果都为id= 1;

一致性锁定读

在某些情况下,用户需要显式的对数据库读取操作进行加锁以保证数据逻辑的一致性,而这要求数据库支持加锁语句,即使是对于SELECT的只读操作,InnoDB存储引擎对于SELECT语句支持两种一致性的锁定读(locking read)操作:
1)SELECT … FOR UPDATE: 对读取的行记录加一个X锁(排他锁),其他事务不能对已锁定的行记录加上任何锁。
2)SELET … LOCK IN SHARE MODE; 对读取的行记录加S锁(共享锁),其他事务可以向被锁定的行加S锁,但是如果加X锁,则被阻塞。
在使用时,务必加上BEGIN,STARTTRANSACTION或者SET AUTOCOMMIT=0,如果不添加则不起作用。

举报

相关推荐

0 条评论