美文网首页
编程 || 事务隔离级别

编程 || 事务隔离级别

作者: 快语 | 来源:发表于2022-11-07 12:50 被阅读0次

    这个我们老背了。

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

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

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

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

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

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

    相关文章

      网友评论

          本文标题:编程 || 事务隔离级别

          本文链接:https://www.haomeiwen.com/subject/cvvbtdtx.html