jdbc之事务

什么是事务?

理解:以转账来理解的话,事务就是转账的一个完整的流程,有账户减钱就有账户加钱。而不应该出现一个减钱失败了,而另一个加钱成功,这样就破坏了数据的完整性。一组业务操作,要么都执行,要么都不执行。

特性:4个,可以简写为ACID

A:原子性

C:一致性

I:隔离性

D:持久性

隔离问题:

脏读:一个事务读到另一未提交的数据

不可重复读:一个事务读到一已提交的数据(update)

虚读(幻读):一个事务读到已提交的数据(insert)

隔离级别:

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

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

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

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

案例1

ABCD 一个事务

Connection conn = null;

try{

  //1 获得连接

  conn = ...;

  //2 开启事务

  conn.setAutoCommit(false);

  A

  B

  C

  D

  //3 提交事务

  conn.commit();

} catche(){

  //4 回滚事务

  conn.rollback();

}

案例2

需求:AB(必须),CD(可选)

Connection conn = null;

Savepoint savepoint = null;  //保存点,记录操作的当前位置,之后可以回滚到指定的位置。(可以回滚一部分)

try{

  //1 获得连接

  conn = ...;

  //2 开启事务

  conn.setAutoCommit(false);

  A

  B

  savepoint = conn.setSavepoint();

  C

  D

  //3 提交事务

  conn.commit();

} catche(){

  if(savepoint != null){   //CD异常

     // 回滚到CD之前

     conn.rollback(savepoint);

     // 提交AB

     conn.commit();

  } else{   //AB异常

     // 回滚AB

     conn.rollback();

  }

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值