zoukankan      html  css  js  c++  java
  • Java事物基础总结

    1.什么是事物?

      事物是逻辑上的的一种操作,这个操作过程中的每一个元素要么全部成功,要么全部失败.例如,银行转账过程视为一个事物,转出过程和转入过程要求全部成功或全部失败,通过提交事物或者回滚事物实现.

    2.事物的作用

      保证一组操作中要么全部成功,要么全部失败.

    3.事物的特性(重要)

      ACID

      Atomicity 原子性:是指事物是一个不可分割的工作单位事物的操作要么全部成功,要么全部失败

      Consister 一致性:事物前后数据的完整性保持一致(例如银行转账,转出账号少多少钱,转入账号就需要多多少钱)

      Isolation 隔离性:是指多个用户并发访问时候,彼此不会产生影响

      Durability 持久性:是指事物一旦被提交,他对数据库的改变时永久性的.

    4.事物的操作

      A:mysql事物操作

        开启事物      start transaction

        提交事物      commit

          回滚事物      rollback 

        注:事物只有回滚或者提交时才会执行

        mysql中有两种方式管理事物

          1)手动提交

            start transaction;
            sql语句操作数据库;
            commit;
    

          2)自动提交

            set autocommit = 0; ---- 0 :off   1:on

      B:jdbc事物操作  --- 通过Connection对象方法操作

        开启事物:connection对象.setAutoCommit=false;

        提交事物:connectin对象.commit();

        回滚事物:connection对象.rollback();

        注:通畅将事物操作的代码放到try catch中,当异常发生时回滚事物

      C:DBUtils操作事物

        开启事物:conn.setAutoCommit=false

        提交事物:DBUtils.commitAndClose(conn)

        回滚事物:DBUtils.rollbackAndClose(conn)

        注:new Query()时,不传递参数

    5.并发访问问题及解决方式

      并发访问问题:

        脏读:事物A读取到事物B为提价的数据

        不可重复读:事物A还未提交时,但事物B已经提交改变了数据库时,A重复读数据库的数据为事物B修改后的数据(因为事物A未提交数据,它重复读取数据时应该为开启事物时数据)

        虚读/幻读:于不可重复读相似.更侧重于读取的数据不一致.

      解决方式:   ---- 设置数据库的隔离级别

            1.read uncommitted 读未提交;  

        2.read committed 读已提交:   可解决脏读问题

        3.repeatable read 可重复度:    可解决问题 脏读和不可重复读

        4.serializable 串行化 同时只能执行一个事物,相当于事物中的单线程

      安全性能对比:

        安全:

        serializable > repeatable read > read committed > read uncommitted

        性能;

        serializable < repeatable read < read committed < read uncommitted

      #####常见的查询操作

        cmd命令查询当前事物的隔离等级:select @@tx_isolation;

        设置当前事物的隔离等级:set session transaction isolation level 隔离等级;

        查看当前是否为自动提交:show variables like '%commit%';

  • 相关阅读:
    mysql环境搭建
    php基础:查看上次插入的主键和影响的行数及关闭mysql连接
    php基础:文件包含与引用 require和include的区别
    php基础:echo和print_r和var_dump的区别
    php基础:变量检测
    php基础:动态变量名
    php基础:代码的短路特性和运算符优先级
    php基础:三元运算符及比较3个数的大小
    php基础:字符串基本函数
    php基础:数组的定义和遍历
  • 原文地址:https://www.cnblogs.com/cocosili/p/6699557.html
Copyright © 2011-2022 走看看