03 | 事务隔离:为什么你改了我还看不见?

这篇主要是记录了事务操作的几个隔离级别,为了方便解释和记忆会以表格的形式来归纳总结。事务的隔离级别和特性都是非常有趣的东西

事务的特性

ACID

  • 原子性
  • 一致性
  • 隔离性
  • 持久性

隔离性和隔离级别

当多个事务同时发生时就会出现脏读,不可重复读幻读,为了解决这些问题有了隔离级别这个概念。标准隔离级别和区别见下表

隔离级别 描述
读未提交 事务未提交就可以被其他事务读了
读提交 事务提交后变更其他事务才能看到
可重复读 启动时的数据在执行过程中看的一致,其他事务不可读
串行化 会加读写锁,后访问的事务必须等待前者先完成

#一张图区分隔离级别

事务A 事务B 读未提交 读提交 可重复读 串行化
启动事务查询得到值1 启动事务
查询得到值1
将1改成2
查询得到V1 2 1 1 1
提交事务B
查询得到V2 2 2 1 1
提交事务A
查询得到V3 2 2 2 2

#事务中的视图创建

在事务执行时数据库里面会创建一个视图的概念,具体如下

读未提交 读提交 可重复读 串行化
- sql执行时创建 事务启动时 直接加锁

#事务的隔离实现

  1. 事务如何实现回滚

比较形象一点,类似于git。每次修改都会有次commit记录修改内容即回滚版本,这样保证了所有事务可以正常回滚就是数据库的多版本并发控制(MVCC)

  1. 事务日志的删除时机

在没有更早的回滚日志时会删除事务日志,这样就意味着长事务会存在很多老的事务视图,会占用大量的存储空间

事务的启动方式

还有点内容,需要结合百度看下什么名堂

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~