• seata相关图形,dljd,cat


    一 spring事务

    二 mybatis事务

    三 hibernate事务

    四 jdbc事务

    五 jdbc的本质

    六 mysql事务 

    1 事务的业务与需求

            正是因为做某件事的时候,需要多条DML语句共同联合起来才能完成,所以需要事务的存在。如果任何一件复杂的事儿都能一条DML语句搞定,那么事务则没有存在的价值了。

    2 思想思路

    1. 一个事务其实就是一个完整的业务逻辑。

    3 流原:事务是怎么做到多条DML语句同时成功和同时失败的呢?

    1. 事务开启:Start Transaction
      1. InnoDB存储引擎:提供一组用来记录事务性活动的日志文件。
      2. 在事务的执行过程中,每一条DML的操作都会记录到“事务性活动的日志文件”中。
    2. 提交事务:commit
      1. 清空事务性活动的日志文件,将数据全部彻底持久化到数据库表中。
      2. 提交事务标志着,事务的结束。并且是一种全部成功的结束。
    3. 回滚事务?(roolbak:回滚永远都是只能回滚到上一次的提交点!)
      1. 清空事务性活动的日志文件,并且将之前所有的DML操作全部撤销
      2. 回滚事务标志着,事务的结束。并且是一种全部失败的结束。

    4 mysql事务自动提交

    1. mysql默认情况下是支持自动提交事务的(自动提交)。
      1. 什么是自动提交?每执行一条DML语句,则提交一次!
      2. 这种自动提交实际上是不符合我们的开发习惯,因为一个业务通常是需要多条DML语句共同执行才能完成的,为了保证数据的安全,必须要求同时成功之后再提交,所以不能执行一条就提交一条。
      3. 自动提交与非自动提交的特点
        1. 启用自动提交模式:
          1. 如果自动提交模式被启用,则单条 DML 语句将缺省地开始一个新的事务。
          2. 如果该语句执行成功,事务将自动提交,并永久地保存该语句的执行结果。
          3. 如果语句执行失败,事务将自动回滚,并取消该语句的结果。
          4. 在自动提交模式下,仍可使用 START TRANSACTION 语句来显式地启动事务。这时,一个事务仍可包含 多条语句,直到这些语句被统一提交或回滚。
        2. 禁用自动提交模式:
          1. 如果禁用自动提交,事务可以跨越多条语句。
          2. 在这种情况下,事务可以用 COMMIT ROLLBACK 语句来显式地提交或回滚。
    2. 查看mysql自动提交事务模式
      1. mysql> SHOW VARIABLES LIKE 'autocommit';
        +---------------+-------+
        | Variable_name | Value |
        +---------------+-------+
        | autocommit    | ON    |
        +---------------+-------+
        1 row in set, 1 warning (0.04 sec)
        结果显示,autocommit 的值是 ON,表示系统开启自动提交模式。
    3. 开启或关闭mysql自动提交事务功能​​​​​​​
      1. 在 MySQL 中,可以使用 SET autocommit 语句设置事务的自动提交模式,语法格式如下:

              SET autocommit = 0|1|ON|OFF;

        对取值的说明:
      2. 值为 0 和值为 OFF:关闭事务自动提交。如果关闭自动提交,用户将会一直处于某个事务中,只有提交或回滚后才会结束当前事务,重新开始一个新事务。
      3. 值为 1 和值为 ON:开启事务自动提交。如果开启自动提交,则每执行一条 SQL 语句,事务都会提交一次。

            MySQL设置事务自动提交(开启和关闭)

    5 事务的4大特性

    事务包括4个特性:ACID

    1. 原子性:不可再分。
    2. 一致性:在同一个事务当中,所有操作必须同时成功,或者同时失败,以保证前后数据的一致性。
    3. 隔离性:
             教室A和教室B之间有一道墙,这道墙就是隔离性。
             两个事务同时去操作一张表:A事务在操作一张表的时候,另一个事务B也操作这张表会那样???这就是隔离性。
             相当于多线程并发访问同一张表一样,此时就会有多线程带来的线程安全问题。为了解决事务之间的线程安全问题,就要使用事务的隔离性。      
    4. 持久性:将数据持久化到硬盘上的数据库中。

    6  重点研究一下事务的隔离性!!!

    1. 事务的隔离级别:A教室和B教室中间有一道墙,这道墙可以很厚,也可以很薄。这道墙越厚,表示隔离级别就越高。

    2. 分类:

      1. 读未提交(最低级别):没有提交就读到了

        1. 原因:事务A可以读取到事务B未提交的数据。

        2. 问题:脏数据,脏读现象

      2. 读已提交:提交之后才能读到。数据绝对真实,oracle默认。

        1. 原因:事务A只能读取到事务B提交之后的数据。

        2. 解决:读未提交

        3. 问题:不可重复读

                 什么是不可重复读取数据呢?在事务开启之后,第一次读到的数据是3条,当前事务还没有结束,可能第二次再读取的时候,读到的数据是4条,3不等于4称为不可重复读取。

      3. 可重复读:即使提交之后也读不到,永远读取的都是事务A刚开启事务时的数据。数据不够真实,出现幻影读。mysql默认。

        1. 原因:事务A开启之后,不管是多久,每一次在事务A中读取到的数据都是一致的。即使事务B将数据已经修改,并且提交了,事务A读取到的数据还是没有发生改变,这就是可重复读。

        2. 解决:不可重复读

        3. 问题:可以会出现幻影读。每一次读取到的数据都是幻象。不够真实!

        4. 案例:以下需求应该使用什么样的隔离级别?可重复读即可。
          下午1点开始开启了事务,只要事务不结束,到下午3点,读到的数据还是那样!
          原理:就是做了数据的一个备份,或者说对数据进行了一个快照。

      4. 序列化/串行化(最高级别):

        1. 原因:事务排队,需要等待其他事务的提交,不能并发!有类似于java中的synchronized,线程同步(事务同步)。

        2. 解决:解决了以上所有问题(读未提交、读已提交、可重复读)

        3. 问题:每一次读取到的数据都是最真实的,并且效率是最低的。

    7 事务的提交与回滚演示

    1. 创建表
    2. 查询表中数据
    3. 开启事务
    4. 插入数据
    5. 查看数据
    6. 修改数据
    7. 查看数据
    8. 回滚事务
    9. 查看数据

    七 oracle事务

    1oracle数据库的事务由下列语句组成:

    1.  一组DML语句,修改的数据在他们中保持一致
    2. 一个DDL (Data Define Language) 语句
    3. 一个DCL (Data Control Language)语句    

    2 事务的开始与结束 

    1. 开始于:第一个执行的DML语句
    2. 结束于:
      1. commit 或 rollback
      2. DDL or DCL语句(隐式的提交事务)
      3. 用户连接异常,或用户断开连接(隐式的回滚)
      4. 系统崩溃(隐式的回滚)

    3 事务的自动提交设置

            因为 oracle 的这种机制,所以有的工具增加了进行自动提交的设置,就是对于需要显示提交的,工具检测出来后,自动的给加上 commit。看着的效果就是不需要执行 commit 就能生效,其实是后台在后面自动给你执行了 commit
    Oracle SQL Developer启用(关闭)自动提交事务,设置自动commit

            若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,系统将自动进行提交,这就是自动提交。其格式为:SQL>SET AUTOCOMMIT ON;

     oracle如何实现自动提交,Oracle sqlplus参数autocommit(自动提交)的设置

    oracle中如何设置自动提交

  • 相关阅读:
    (四)、传热学-热传导问题的数值解法
    如何使用Vue CLI进行预渲染
    金融行业多活架构设计及容灾发展趋势
    k8s网络
    5.javase_循环语句
    JAVA直播购物平台计算机毕业设计Mybatis+系统+数据库+调试部署
    1978-2021年全国及31省市农业机械总动力(万千瓦)
    React Native自学笔记
    IPWorks EDI Translator Delphi Edition
    python 编写 phpstudy_2016 EXP 漏洞利用脚本之RCE
  • 原文地址:https://blog.csdn.net/aiwokache/article/details/126276293