当前位置:网站首页>seata相关图形,dljd,cat

seata相关图形,dljd,cat

2022-08-11 11:44:00 aiwokache

一 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中如何设置自动提交

原网站

版权声明
本文为[aiwokache]所创,转载请带上原文链接,感谢
https://blog.csdn.net/aiwokache/article/details/126276293