隔离级别为serializable
来源:3-15 锁模块之事务并发访问产生的问题以及事务隔离机制_2
qq_灬Mamba磊_0
2019-02-14
视频里说的是 设置隔离级别为serializable的时候,执行select * from account_innodb;的时候并不是执行非阻塞读,还是显式加上了lock in share mode 这么一个锁,lock in share mode 不是共享锁嘛 应该是非阻塞的,为什么前面又说并不是执行非阻塞读呢 select * from account_innodb lock in share mode;执行这句话是执行了非阻塞读呀,不执行非阻塞读的话不应该是 select * from account_innodb for update;这个加上排他锁的操作嘛
2回答
-
翔仔
2019-02-14
同学好,以下是mysql官方文档
SERIALIZABLE
This level is like REPEATABLE READ, but InnoDB implicitly converts all plain SELECT statements to SELECT ... LOCK IN SHARE MODE if autocommit is disabled. If autocommit is enabled, the SELECT is its own transaction. It therefore is known to be read only and can be serialized if performed as a consistent (nonlocking) read and need not block for other transactions. (To force a plain SELECT to block if other transactions have modified the selected rows, disableautocommit.)
意思就是说SERIALIZABLE下,如果autocommit是false,则select语句都用的是lock in share mode。。
视频里面要表达的意思是,在SERIALIZABLE级别下,不会使用mysql的mvcc机制,而是在每一个select请求下获得读锁,在每一个update操作下尝试获得写锁,指的是mvcc机制哈
10 -
qq_哈之仆_0
2019-02-16
我理解的意思是在 Mysql InnoDB 引擎下 Select 语句默认是不加共享锁的。
视频中为了测试锁,所以给 select 语句加上了 lock in share mode。
最后隔离级别设置为 Serializable 的时候,就不需要显式在 Select 语句后面添加 lock in share mode 了。
因为 Serializable 模式下,默认所有的语句都会加锁。
00
相似问题