Spring中的事务管理

 

  事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户 程序的执行所引起,并用形如begin transactionend transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

  简单点说,事务就是一组逻辑操作,这组逻辑操作拥有ACID4个属性规范:

  1. 原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。(要么成功,要么失败)
  2. 一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
  3. 隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰
  4. 持久性(durability):持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

  也就是说事务的概念来源于对数据库的访问及操作,而事务并发问题使得事务管理成为了开发中必须关注的一个点。

  spring作为java开发的一个顶级的一站式开发框架,其中就包含了声明式事务的支持。详细如下图:

  Spring中的事务管理模块基础

  事务中的几个重要属性:

  隔离问题:

  • 脏读:一个事务读到另一个事务没有提交的数据
  • 不可重复读:一个事务读到另一个事务已提交的数据(update)
  • 虚读(幻读):一个事务读到另一个事务已提交的数据(insert)

  隔离级别:

         read uncommitted:读未提交。存在3个问题

         read committed:读已提交。解决脏读,存在2个问题

         repeatable read:可重复读。解决:脏读、不可重复读,存在1个问题。

         serializable :串行化。都解决,单事务。

    Spring中的事务管理模块基础

  • mysql 事务操作--简单:假设事务包含a,b,c,d4个数据库操作,那么这个事务的逻辑代码一般是这样
  • Connection conn = null;
    try{
      //1 获得连接
      conn = ...;
      //2 开启事务
      conn.setAutoCommit(false);
      A
      B
      C
      D
      //3 提交事务
      conn.commit();
    } catche(){
      //4 回滚事务
      conn.rollback();
    }

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-07-03
  • 2021-08-12
猜你喜欢
  • 2021-08-04
  • 2021-11-20
  • 2022-12-23
  • 2023-03-03
  • 2021-06-22
  • 2022-12-23
相关资源
相似解决方案