数据库的事务,acid及隔离级别的概念梳理

本文解析了事务的概念,重点介绍了ACID特性(原子性、一致性、隔离性和持久性),以及并发情况下可能出现的脏读、不可重复读和幻读问题。详细讲解了不同隔离级别的表现和应用场景,帮助理解事务在数据库管理中的关键作用。
摘要由CSDN通过智能技术生成

什么事事务

事务是一组命令的合称,在mysql中可以理解为一次性指向一组增删改查命令。事务这个概念本身是没有做数据安全的约束的,所以为了数据安全性增加了AICD这四个属性对事务进行约束,使一个不安全的事务成为一个完美的事务

什么是ACID

A:原子性:简单来说就是事务要不同时成功,要不同时失败
C:一致性:数据库总是从一个一致的状态转到另外一个一致的状态,举个例子就是我在一个事务中多次查询后查询的结果是一致的
I:事务在提交前对其他事务是不可见的,如果不在并发过程中,事务都是具有隔离性的
D:持久性: 一旦事务提交,则其所作的修改就会永久保存到数据库中。即使系统崩溃,修改的数据也不会丢失。

这几个概念有点难理解,我直接把别人的cv过来:

  • 只要满足一致性,事务的执行结果才是正确的。
  • 在无并发的情况下,事务串行执行,隔离性一定能够满足。此时只要满足原子性,就一定能满足一致性。
  • 在并发的情况下,多个事务并行执行,事务不仅要满足原子性,还要满足隔离性,才能满足一致性。
  • 事务满足持久化是为了能应对数据库崩溃的情况。

并发中数据读取的问题

  1. 脏读:简单来说就是有A B两个事务,B的事务还没提交,A就取读B的数据。B出错回滚了,A读的数据就是脏数据
  2. 不可重复读:简单来说就是A,B都对相同的数据进行操作,A第一次读数据,读完后。恰好B对数据进行了更新或者删除,然后提交了事务,数据更改,A再读就发现前后数据不一样,所以叫不能重复读取
  3. 幻读:幻读,假设A的事务逻辑是查询某条记录,然后对这条记录进行更新。按照A的事务逻辑来说,如果记录为空,那么事务应该是失败了。但是这时b插入了这条记录,这条记录刚好符合A的搜索条件,然后导致A事务成功了,这不是我们想要的结果。我的理解是不可重复读是读出问题,幻读是写出问题
    虽然他们最终结果都是读错,但是造成读错的原因是不相同的

隔离级别

隔离级别是为了解决上面三个问题而提出的规范

  • 未提交读(READ UNCOMMITTED)
    事务中的修改即使没有提交,对其他事务也都是可见可操作
  • 提交读(READ COMMITTED)
    一个事务从开始直到提交之前,所做的任何修改对其它事务都是不可见的。
  • 可重复读(REPEATABLE READ)
    可重复读保证了在同一事物中多次读取同样记录的结果是一致的。
  • 可串行化(SERIALIZABLE)
    该级别是最高的隔离级别,通过强制事务串行执行避免上面的幻读问题
隔离级别脏读可能性不可重复读可能性幻读可能性
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值