什么是事务?

事务就是指一系列的信息交换操作,这整个过程称为事务,这一系列的信息交换是一个不可分割的整体,也就是说,要么所有的信息交换都完成,要么一次交换都不进行 (要么完全成功,要么完全失败)

transaction  [trans'ac·tion || træn'zækʃn]

n.  交易, 执行, 办理

事务的四大特性(ACID)

A:Atomicity 原子性 事务中所有的操作都是不可再分割的单位,要么全成功,要么全失败

C:Consistency 一致性 万物守恒定律 转账,一方多了,一方必然要少了

I:Isolation 隔离性 在并发操作中,不同的事务之间应该隔离开来,不能相互干扰

D:Durability 持久性 一旦事务提交成功,事务中所有的数据操作都必须要被持久化到数据库中

 

事务的并发读会产生的问题

1,脏读:A事务读到了B事务未提交更新的数据,即读到了脏数据  [不同的事务]

  数据库测试表字段值原本为1000

  A事务给num加500

  B事务读取num的值(1000)

  A事务提交修改(此时测试表中num的值为1500)

  但是B拿到的num是1000,此时称为脏读

2,不可重复读:在同一事务中两次读取的数据不一样,因为另外一个事务对此数据进行了修改[更新]

  数据库测试表字段num值原本为1000

  A事务查询num的值(num为1000)

  B事务给num加500

  B事务提交修改(此时测试表中num的值为1500)

  A事务再次查询num的值(num为1500)

  A事务两次查询的值不一样,此时称为不可重复读(因为重复读时数据却每次都不一样)

3,幻读:在同一事务中两次查询表的结果不一样,因为另外一个事务对此表进行了修改[插入/删除]

  数据库测试表本来有5条数据

  A事务查询测试表(5条)

  B事务向测试表插入一条数据

  B事务提交修改(此时测试表中有了6条数据)

  A事务再次查询测试表(6条)

  A事务两次查询表得到的结果不一样,就像产生了幻觉,此时称为幻读

 

4种隔离级别

1,串行化:性能最差,但是不会出现任何并发问题,因为它对同一数据的操作是串行的,非并发访问 SERIALIZABLE

2,可重复读:mysql默认 可以处理脏读和不可重复读,无法处理幻读,性能比1好 REPEATABLE READ

3,读已提交:oracle默认 可以处理脏读,无法处理不可重复读,幻读,性能比2好 READ COMMITTED

4,读未提交:性能最好,但是可能引发各种并发问题 READ UNCOMMITTED

5事务的传播行为

定义:当事务方法被另一个事务方法调用时,必须指定事务应该如何传播,是用原来的事务,还是开启一个新事务

spring定义了7种传播行为

默认是REQUIRED:如果有事务在运行,当前方法就在这个事务中运行,否则,就开启一个新事务,并在自己的事务内运行

第二种是REQUIRES_NEW:当前方法必须启动新事务,并在它自己的事务中运行,如果有事务正在运行,应该将它挂起

还有34567,一般人也记不住,常用的是前两种

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值