• 事务


    事务概述和演示:

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

      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
  • 相关阅读:
    1.17 想学好Linux,这些习惯必须养成(初学者必读)
    1.16 Linux该如何学习(新手入门必看)
    2.3 为什么建议使用虚拟机来安装Linux?
    2.1 安装Linux系统对硬件有什么要求?
    2.5 使用U盘安装Linux系统
    Expenditure Reduction ( DP )
    My University Is Better Than Yours (建图 + tj去环缩点 + 拓扑序 )
    profession computing week1
    【笔记记录】【敏感信息已混淆】k8s生态下 kubectl命令、pod性能验证及监控
    selenium 显示等待封装
  • 原文地址:https://www.cnblogs.com/sybk/p/10004751.html
Copyright © 2020-2023  润新知