编程 || 事务隔离级别

这个我们老背了。

四个级别:读未提交;读已提交;可重复读;序列化。

读未提交是指一个事务里的两次查询,可以查到另一个事务未提交的增改操作。
读已提交是指一个事务里的两次查询,可以查到另一个事务已提交的增改操作。
可重复读是指一个事务里的两次查询,不可以查到另一个事务已提交的改操作,但是可以查到增操作。
序列化读是指一个事务里的两次查询,不可以查到另一个事务已提交的增改操作。

要放在一起才看的明白。
其中序列化最容易理解,就是前后加了最重的锁,读操作会碰到锁。
读未提交也很容易理解,就是没有锁,也没有其他啥的并发机制,你改我就读。
比较难理解的是中间两档,读已提交和可重复度。

难理解是因为没理解MVCC,多版本并发可控制。

理解MVCC有点吃力的话,其实说白了就是CopyOnWrite,和Java中的这个并发工具一样。
CopyOnWrite就是说在写操作的时候,会将原始数据拷贝一份。如此一来,如果在修改的时候还有查询,那么就去查原始数据,而自己改完以后,会依据CAS机制去修改数据。这就是一个无锁并发,用空间换了时间,提升了性能。由于每次写都要拷贝副本,所以适合读多写少的场景。

再回头来看MVCC,多版本并发控制,也是类似的意思。当每次写数据的时候,拷贝一份原始数据,那么另一个事务读的时候,就可以读原始数据,就可以保证重复读了。并且由于事务众多,每个事务都会copy一份数据出来,并标上事务号。
有了MVCC这个机制后,选择是读已提交或者可重复读就是一个策略问题。想要读已提交那就选择最新的事务版本来读。想要可重复读,就选择自己当前事务的版本来读。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容