事务

6 篇文章 0 订阅

事务概述和演示:

  一件完整的事情.可以包含多个操作,操作要么成功,要么全部失败

  mysql中的事务:

     默认是事务自动提交
     手动提交:
     1.关闭自动提交
     2.手动开启一个事务
    start transaction;
    commit;
    rollback;

java中的事务:

   Connection接口的api
    setAutoCommit(false):手动的开启一个事务
    commit():提交
    rollback():回滚

   DBUitls使用事务:

    1.创建QueryRunner
       new QueryRunner():手动事务 调用他的方法的时候必须手动传入一个连接,连接得手动关闭,事务得手动控制.
           new QueryRunner(DataSource ds):自动事务 调用他的方法的时候不需要传入一个连接,连接自动关闭,事务自动控制.
    2.使用的方法 (手动事务)
       query(Conection con .....)
       update(Connection con .....)
![DBUtils在使用事务][1]


事务中要想保证在一个事务中,必须保证使用同一个Connection连接(在中项目解决方式)

    方式1:向下传递连接(将链接对象作为参数传递给dao层)
![JDBCUtils&向下传递][2]

    方式2:将连接和当前线程绑定
       ThreadLocal
       常用的方法:
        set(Object value)
        Object get()
        remove()
![自定义工具类创建链接对象&和线程绑定][3]
![调用工具类][4]

事务的特性:

ACID

 - 原子性 -- 事务不可分割.
 - 一致性 -- 事务执行的前后数据的完整性保持一致.
 - 隔离性 -- 一个事务执行的过程中,不应该受到其他的事务的干扰.
 - 持久性 -- 事务一旦提交,数据就永久保持到数据库中.

若不考虑隔离性的时候会发生的问题

 - 脏读        - 一个事务读到了另一个事务未提交的数据.
 - 不可重复读  - 一个事务读到了另一个事务已经提交的update数据,导致多次查询结果不一致.
 - 虚读        - 一个事务读到了另一个事务已经提交的insert数据,导致多次查询结构不一致.

设置隔离级别

通过设置隔离级别可以解决上面的问题
 - read uncommitted:读未提交 什么问题都避免不了
 - read committed:读已提交 避免脏读
 - repeatable read:可重复读 避免脏读和不可重复读
 - serializable:串行化 避免所有的问题 锁表
  安全:
     serializable> repeatable read> read committed> read uncommitted
  效率
     serializable< repeatable read< read committed< read uncommitted
    
mysql中默认隔离级别 repeatable read
oracle中默认隔离级别 read committed
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值