事务4大特性_事务并发问题_事务隔离级别

一、事务特性

事务的四个特性ACID指的是:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

1. 原子性

原子性是指事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生。
如,A向B转钱,在事务中的扣款和加款两条语句,要么都执行,要么都不执行。

2. 一致性

一致性是指事务使得系统从一个一致的状态转换到另一个一致状态。
如,A和B存款总额为1000,A向B转钱,无论失败,最终A和B的存款总额依然为1000。

3. 隔离性

多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。

本篇会通过具体案例详细介绍事务的隔离性。

4. 持久性

持久性,意味着在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。即使出现了任何事故比如断电等,事务一旦提交,则持久化保存在数据库中。

二、事务并发问题 (事务并发问题)

事务的并发问题可能导致更新丢失、脏读(Dirty Read)、不可重复读(NonRepeatable Read)、幻读(Phantom Read)的问题。

1. 更新丢失

两个事务同时操作相同数据,后提交的事务会覆盖先提交的事务处理结果,更新丢失通过乐观锁就可以解决。

2. 脏读

事务A读取到了事务B已经修改但尚未提交的数据,如果事务B回滚,A读取的数据无效,不符合一致性。

3. 不可重复读

事务A对数据的俩次访问期间,事务B对数据进行了修改操作,导致俩次读取的数据不一致,不符合隔离性。

4. 幻读

事务A对数据的俩次访问期间,事务B对数据进行了增加操作,导致俩次读取的数据集合不一致,不符合隔离性。

三、事务隔离级别

MySQL四种隔离级别指的是:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)、可串行化(Serializable)。

查看数据库事务隔离级别:show variables like ‘tx_isolation’;

设置数据库事务隔离级别:set tx_isolation = ‘REPEATABLE-READ’;

1. 读未提交(可预防更新丢失)

在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。

读取未提交的数据,则会发生赃读。

2. 读已提交(可预防更新丢失,脏读)

一个事务多次读取的过程中,另一个事务可能对同一条数据做修改并提交,导致前一个事务多次读取到的数据不一致,则会发生不可重复读。

一个事务只能看见已经提交事务所做的改变。这是大多数数据库系统的默认隔离级别,但非MySql。

3. 可重复读(可预防更新丢失,脏读,不可重复读)

确保同一事务的多个实例在并发读取数据时,会看到同样的数据行,并且多次读结果永远是第一次读取的结果(快照版本)。此级别依然会发生幻读,这是MySql的默认隔离级别。

4. 可串行化(可预防更新丢失,脏读,不可重复读,幻读)

通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值