请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

隔离级别为serializable

视频里说的是 设置隔离级别为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;这个加上排他锁的操作嘛

正在回答 回答被采纳积分+3

2回答

翔仔 2019-02-14 17:52:04

同学好,以下是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机制哈

1 回复 有任何疑惑可以回复我~
qq_哈之仆_0 2019-02-16 13:37:39

我理解的意思是在 Mysql InnoDB 引擎下 Select 语句默认是不加共享锁的。

视频中为了测试锁,所以给 select 语句加上了 lock in share mode。

最后隔离级别设置为 Serializable 的时候,就不需要显式在 Select 语句后面添加 lock in share mode 了。

因为 Serializable 模式下,默认所有的语句都会加锁。

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信