03_事务隔离

03_事务隔离

事务隔离

事务需要保证一组数据库操作,要么全部成功,要么全部失败;

MySQL事务隔离性是保证数据一致性和并发控制的重要手段之一,它对于多个事务同时访问和修改同一数据的情况下,能够保证事务之间的独立性和隔离性,避免数据的不一致和冲突。

ACID是MySQL事务的四个特性,其中隔离性是指多个并发事务之间相互隔离,互不干扰,每个事务仅能看到自己的修改,而不能看到其他事务的修改。

  • ACID概念最早由IBM的研究员在20世纪80年代提出,主要是为了解决数据库并发控制和数据一致性的问题,并逐渐成为了数据库事务的标准特性。
  • ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性)

隔离级别

MySQL中有四种隔离级别,包括读未提交、读提交、可重复读和串行化。

  • 读未提交(read uncommitted
  • 读提交(read committed
  • 可重复读(repeatable read)、
  • 串行化(serializable

其中,读未提交是最低的隔离级别,它允许一个事务读取另一个事务未提交的数据,可能会出现脏读、不可重复读和幻读的问题。

读提交是一个事务提交后才能被其他事务看到,避免了脏读的问题,但可能会出现不可重复读和幻读的问题。

可重复读是MySQL默认的隔离级别,它保证了在一个事务执行期间,读取的数据是一致的,不会出现脏读、不可重复读和幻读的问题。

串行化是最高的隔离级别,它通过加锁的方式保证了事务的串行执行,避免了所有并发问题,但会导致性能问题。

事务隔离的实现

MySQL的事务隔离性是通过多版本并发控制(MVCC)来实现的,它通过为每个事务创建一个独立的视图来保证事务之间的隔离性。

  • 在可重复读隔离级别下,视图是在事务启动时创建的,整个事务存在期间都使用这个视图。
  • 在读提交隔离级别下,视图是在每个SQL语句开始执行时创建的。
  • 而在读未提交隔离级别下直接返回记录上的最新值,没有视图概念。
  • 在串行化隔离级别下,直接用加锁的方式来避免并发访问。

同时,MySQL在实现MVCC时,每条记录在更新时都会同时记录一条回滚操作,同一条记录在系统中可以存在多个版本,回滚日志会在不需要的时候被删除。

最后,需要注意的是,长事务会导致系统里面存在很老的事务视图,这些事务可能会访问数据库里面的任何数据,导致大量占用存储空间,因此建议尽量避免使用长事务。

默认隔离级别

Oracle 数据库的默认隔离级别其实是:读提交;

MySQL 数据库的默认隔离级别是:可重复读。

posted @ 2023-06-03 08:35  洛亓  阅读(32)  评论(0编辑  收藏  举报