事务


一、什么是事务?

事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。

二、事务的四大特性

  1. 原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
  2. 一致性:在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
  3. 隔离性:隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行
    相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,
    必须串行化或序列化请 求,使得在同一时间仅有一个请求用于同一数据。
  4. 持久性:在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

三、事务的隔离级别

隔离级别描述
DEFAULT:使用底层数据库的默认隔离级别。对于大多数数据库来说,默认隔离级别都是READ_COMMITTED
READ_UNCOMMITTED:允许事务读取未被其他事务提交的变更。脏读、不可重复读和欢度问题都会出现
READ_COMMITTED:只允许事务读取已经被其他事务提交的变更。可以避免脏读,但不可重复读和幻读问题仍然可能出现
REPEATABLE_READ:确保事务可以多次从一个字段中读取相同的值。在这个事务持续期间,禁止其他事务对这个字段进行更新。可以避免脏读和不可重复读,但幻读问题仍然存在
SERIALIZABLE:确保事务可以从一个表中读取相同的行。在这个事务持续期间,禁止其他事务对该表插入、更新和删除操作。所有并发问题都可以避免,但性能低下

四、事务的传播机制

传播属性描述
REQUIRED:如果当前没有事务,就新建一个事务,如果已存在一个事务中,加入到这个事务中,这是最常见的选择
REQUIRED_NEW:新建事务,如果当前存在事务,把当前事务挂起
SUPPORTS:支持当前事务,如果没有当前事务,就以非事务方法执行
NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起
MANDATORY:使用当前事务,如果没有当前事务,就抛出异常
NEVER:以非事务方式执行操作,如果当前事务存在则抛出异常
NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,就新建一个事务
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值