事务的四大特性(ACID)及并发事务问题


1. 什么是事务

        事务是一组操作的集合,它是不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败

2. 事务的四大特性(ACID)

  • 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。任何一个操作都会导致整个事务的失败,同时其他已经被执行的操作都会被撤销并回滚。
  • 一致性(Consistency):事务的一致性是指事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处于一致性状态。比如:从A账户转账到B账户,不能出现A账户扣了钱而B账户没有加钱。
  • 隔离性(Isolation):数据库系统提供了隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。也就是说一个事务的内部操作以及使用的数据对其它并发事务时隔离的,各个事务之间不能相互干扰。
  • 持久性(Durability):事务一旦提交或回滚,那么它对数据库中的数据的改变是永久的。即使服务器系统崩溃或者服务器宕机等故障,只要数据库重新启动,那么一定能够将其恢复到事务成功结束后的状态。

3.并发事务导致的问题

        数据库中进行并发事务的操作时,会导致脏读不可重复读幻读等问题。

3.1 脏读

        脏读指的是一个事务读到另外一个事务还没有提交的数据。
在这里插入图片描述
        如上面这个例子,事务A执行第1个和第2个操作时,数据库中数据已经被更新了,然后事务B执行一个查询操作,把事务A更新后的数据读了出来,但这时事务A并没有提交事务,如果事务A中出现错误,那么会导致整个事务A进行回滚,则事务B读取到了一个脏数据。

3.2 不可重复读

        不可重复读指的是一个事务先后读取同一条记录,但两次读取的数据不同。
在这里插入图片描述

        如上面这个例子,事务A在执行第一条操作时已经读取到数据库中的一条数据,然后事务B将这条数据更新了并且提交了事务。这时事务A执行到第三步操作时,又将该数据读取处理啊,而这时读取的数据跟之前读取的数据并不一致,从而导致了不可重复读。

3.3 幻读

        幻读指的是一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在了,好像出现了幻影。
在这里插入图片描述
        如上面这个例子,事务A中第一步查询数据时发现为空,这时事务B向数据库中插入数据并且提交事务,这时事务A向数据库中插入一个数据,发生了主键冲突。然后事务A第三步继续查询数据库发现还是为空(默认解决了不可重复读问题),从而产生了幻读。
        相信这里大家会很迷茫,为什么默认解决了不可重复的问题,然后第三步查询的结果还是为空。假设不可重复读的问题没有解决,那么事务A的第三步读取的结果就是事务B提交的结果,那么与第一步读取的结果不一致,从而是不可重复读问题。既然插入数据时发现数据存在,但读出来有结果自然不是幻读问题。幻读是在解决了不可重复读后引发出来的,自然第一步的结果与第三步的结果要一致,不然还是不可重复读。(这里可能解决的不够清楚,不懂的网友可以自己查查资料)

4.事务隔离级别

  • 读未提交:指的是一个事务可以读去到另外一个未提交事务的数据。
  • 读已提交:事务可以看到其他事务对数据的修改。也就是说,在事务处理期间,如果其他事务修改了相应的表,那么同一个事务的同一sql在其他事务执行前后返回的是不同的结果。一个事务要等另一个事务提交后才能读取数据。
  • 可重复读:一个事务可以访问其他事务新增的数据,但是不可访问其他事务修改的数据,读取数据的事务将会禁止写事务,写事务则禁止任何其他事务
  • 可串行化:数据库事务的最高隔离级别。在此级别下,事务串行执行。可以避免脏读、不可重复读、幻读等读现象。但是效率低下,耗费数据库性能,不推荐使用。
隔离级别脏读不可重复读幻读
读未提交
读已提交(Oracle默认)×
可重复读(MYSQL默认)××
可串行化×××
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值