数据库事务学习

基于数据库,数据库连接的事务

事务主要是为了保证数据操作的一致性[执行单元],要么全成功,要么全失败。
事务的特征:

  1. 原子性(atomicity):一个事务是不可分割的最小工作单位[不可能拆分该事务,插入其他事],要么都做,要么都不做
  2. 一致性(consistency):事务必须是使数据库从一个一致性状态变另一个一致性状态
  3. 隔离性(isolation):多个事务之间不能相互干扰,且相互独立执行
  4. 持久性(durability):事务提交后,不能后悔[临时表数据已经删除],只能通过日志等其他操作改回去。

增删改才会产生事务,每一次操作数据,会把相关(满足条件)数据放在一张临时表中,临时表会尝试修改真实表,修改成功就删除临时表数据,返回相关成功状态。【临时表是单例,会加锁防止多线程操作】
如下insert操作

  • 第一:把要插入的数据,放在临时表。
  • 第二:尝试把临时表数据插入到实际表中。
  • 第三:如果没有问题,就复制一份到实际表中,并将临时表中的数据删除。如果有问题,返回错误信息,临时表清空】

在这里插入图片描述
如下delete操作【

  • 第一:查询满足删除条件的数据,并锁住实际表,防止别人操作。
  • 第二:复制满足条件的数据到临时表中。
  • 第三:执行删除[尝试删除临时表数据],如果出现错误,原来的数据原封不动,清空临时表中满足本次条件的记录,返回错误码。如果执行成功,真正的删除原始表中的记录】
  • 在这里插入图片描述
    如下update操作【
  • 第一:查询实际表中满足条件的数据。
  • 第二:复制满足条件的数据到临时表中,并加锁实际表,防止其他人操作。
  • 第三:执行更新操作[更新临时表],如果更新成功,则更新数据,并复制一份到实际表中。如果更新失败,则删除临时表中的数据,并返回错误码。】
    在这里插入图片描述

即增删改[执行操作中,其他操作只能执行查询操作]都是两部操作,第一:查询,第二:执行相关操作,每一个表都只有一个临时表。类似于提供后悔的机会(回滚事务)
数据库事务操作的基本流程:

  1. 事务开启(open)
  2. 执行事务(execute)
  3. 1提交事务(自动提交AutoCommit,手动提交CustomCommit)
    2事务回滚(rollback如果出现错误)
  4. 关闭事务(close)

事务的基本原理:
Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的,对于纯JDBC操作数据库,想要利用到事务,可以按照以下步骤进行

  1. 获取连接 Connection con = DriverManager.getConnection();—对应open
  2. 开启事务 con.setAutoCommit(true/false)默认是true
  3. 执行CRUD
  4. 提交事务/回滚事务 con.commit()/con.rollback();
  5. 关闭连接 con.close() —对应数据库的close

事务的传播性propagation:
在业务逻辑中涉及到对多个事务执行需要同时一致性,才能一致性[例如在事务里面又调用了其他事务方法, 如登录事务中,嵌套调用了日志事务]。
事务传播级别:在这里插入图片描述
可以通过配置设置,设置事务处理那些返回异常,因此处理的方法都需要抛出异常:
<tx:method name=“transfer*” propagation=“REQUIRED” rollback-for=“Exception”/>


学习源于网络,实践源于生活

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值