事务的特性及隔离级别

事务是数据库中确保数据一致性的重要机制,具备ACID属性:原子性、一致性、隔离性和持久性。事务并发执行可能导致脏读、不可重复读和幻读问题。隔离级别包括READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ和SERIALIZABLE,不同级别解决了不同程度的并发问题。MySQL的InnoDB存储引擎默认使用可重复读隔离级别。
摘要由CSDN通过智能技术生成

什么是事务

逻辑上的一组操作,要么全都执行,要么全都不执行。

事务的特性(ACID)

  1. 原子性(A):一组操作语句要么全都执行,要么全都不执行,不存在执行一部分的情况。
  2. 一致性(C):事务只能从一个一致性状态转变为另一个一致性状态。也就是事务执行前后,数据是一致的。
  3. 隔离性(I):多个事务之间是互相独立的,不会相互干扰。
  4. 持久性(D):事务对数据的修改是永久的,即使是数据库宕机或崩溃也不会改变。
    👀:只有原子性,隔离性,持久性实现的前提下,一致性才能得到保证

在事务的并发执行过程中,往往会产生以下几个问题

  1. 脏读:一个事务(A)读取到另一个事务(B)修改但未提交的数据。此时,我们称A读取到的数据是“脏数据”。使用“脏数据”操作是不正确的
  2. 不可重复读:事务A第一次读取到某一数据值为1,之后事务B修改此数据为2,事务A再次读取此数据时值变为了2。即,同一事务多次读取到的数据不一致的情况成为不可重复读
  3. 幻读:与不可重复读类似,指事务A在两次读取数据之间,事务B增加或删除了一些数据。导致事务A两个读取到的数据行数不一致的情况。
  4. 丢失修改:事务A和事务B对某一数据C进行修改,事务A把C的值改为1,然后事务B把C的值改为2,此时事务A修改的数据被覆盖。此过程称为丢失修改。

❓:不可重复读和幻读的区别
不可重复读在于对数据的修改,表现在某个数据上。而幻读则是对数据的增加或删除,表现在数据行的增加或减少。

事务的隔离级别

  1. READ-UNCOMMITTED(读取未提交):可以读取到尚未提交的数据。会有脏读,幻读,不可重复读的问题
  2. READ-COMMITTED(读取已提交):可以读取到已经提交的数据。会有幻读,不可重复读的问题,解决了脏读的问题
  3. REPEATABLE-READ(可重复读):事务多次读取到的结果是一致的(本事务自己修改的数据除外),会有幻读的问题,解决脏读,不可重复读的问题
  4. SERIALIZABLE(可串行化):最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。

👀 MySQL的InnoDB存储引擎默认的是可以重复读

参考JavaGuide

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值