精华内容
下载资源
问答
  • 事物

    2017-11-29 15:45:06
    事物 1.脏读 a事物中修改了name数据,为提交。 b事物读取了name数据。 a事物回滚。 b事物读取的name数据为错误数据。2.不可重复读 a事物第一次读取name。 b事物修改/删除了name。 a事物再次读取name...

    事物
    1.脏读
    a事物中修改了name数据,为提交。
    b事物读取了name数据。
    a事物回滚。
    b事物读取的name数据为错误数据。

    2.不可重复读
    a事物第一次读取name。
    b事物修改/删除了name。
    a事物再次读取name。
    a事物前后两次读取的name不一样。

    3.幻读
    a事物第一次读取name=’xiao’的数据。
    b事物插入了name=’xiao’的新数据。
    a事物再次读取name=’xiao’的数据。
    a事物前后两次读取的name=’xiao’不一样。

    Spring事务
    传播行为
    spring特有的事务传播行为,spring支持7种事务传播行为,确定客户端和被调用端的事务边界(说得通俗一点就是多个具有事务控制的service的相互调用时所形成的复杂的事务边界控制)
    method1(){ method2()}
    REQUIRED:业务方法需要在一个事务中运行,如果被调用端发生异常,那么调用端和被调用端事务都将回滚。
    method2的事物传播属性为REQUIRED,
    结果:如果method1在事物a中运行,则method2会加入事物a中。如果method1没有在事物中运行,则method2会为自己创建一个事物。

        NOT_SUPPORTED:声明方法不需要事务。method2的事物传播属性为NOT_SUPPORTED,
        结果:如果method1在事物a中运行,则到method2时,事务a会被挂起会,method2结束后,事务a恢复执行。如果method1没有在事物中运行,则method2不会再开启一个事物。
    
        REQUIRESNEW:该属性表明不管当前是否存在事务,业务方法总会为自己发起一个新的事务。method2的事物传播属性为REQUIRESNEW,
        结果:method1在事物a中运行,则到method2时,事务a会被挂起会,method2为自己新建一事物b,method2结束后,事物b结束,事务a恢复执行。
        如果method1没有在事物中运行,则method2新开启一个事物b。
    
        MANDATORY:该属性指定业务方法只能在一个已经存在的事务中执行,业务方法不能发起自己的事务。
        SUPPORTS:这一事务属性表明,如果业务方法在某个事务范围内被调用,则方法成为该事务的一部分。如果业务方法在事务范围外被调用,则方法在没有事务的环境下执行。method2()的事物传播属性为SUPPORTS,
        结果:如果method1开启事物a,method2()则加入事物a,如果method1没有在事物中,method2()则也不在事物中执行。
    
        Never:指定业务方法绝对不能在事务范围内执行。method2()的事物传播属性为Never,
        结果:如果method1开启事物a,执行到method2()时则抛出异常。
    
        NESTED:如果一个活动的事务存在,则当前方法运行在一个嵌套的事务中。如果没有活动事务,则按REQUIRED属性执行。
        内部事务的回滚不会对外部事务造成影响。method2()的事物传播属性为NESTED,
        结果:如果method1开启事物a,method2()则将开启事物b,嵌套到事物a中。如果method1没开启事物,则创建事物b。
    

    隔离级别
    隔离级别定义一个事务可能受其他并发事务活动活动影响的程度。另一种考虑一个事务的隔离级别的方式,是把它想象为那个事务对于事物处理数据的自私程度。
    ISOLATION_DEFAULT 使用后端数据库默认的隔离级别。
    ISOLATION_READ_UNCOMMITTED 允许读取尚未提交的更改。可能导致脏读、幻影读或不可重复读。
    ISOLATION_READ_COMMITTED 允许从已经提交的并发事务读取。可防止脏读,但幻影读和不可重复读仍可能会发生。
    ISOLATION_REPEATABLE_READ 对相同字段的多次读取的结果是一致的,除非数据被当前事务本身改变。可防止脏读和不可重复读,但幻影读仍可能发生。
    ISOLATION_SERIALIZABLE 完全服从ACID的隔离级别,确保不发生脏读、不可重复读和幻影读。这在所有隔离级别中也是最慢的,因为它通常是通过完全锁定当前事务所涉及的数据表来完成的。

    @TransactionDefinition:
    TransactionDefinition.ISOLATIONDEFAULT:这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是TransactionDefinition.ISOLATION_READ_COMMITTED。
    TransactionDefinition.ISOLATION_READ_UNCOMMITTED:该隔离级别表示一个事务可以读取另一个事务修改但还没有提交的数据。该级别不能防止脏读,不可重复读和幻读,因此很少使用该隔离级别。比如PostgreSQL实际上并没有此级别。
    TransactionDefinition.ISOLATION_READ_COMMITTED:该隔离级别表示一个事务只能读取另一个事务已经提交的数据。
    该级别可以防止脏读,这也是大多数情况下的推荐值。
    TransactionDefinition.ISOLATION_REPEATABLE_READ:该隔离级别表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。
    该级别可以防止脏读和不可重复读。
    TransactionDefinition.ISOLATION_SERIALIZABLE:所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。

    TransactionDefinition.PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是默认值。
    TransactionDefinition.PROPAGATION_REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则把当前事务挂起。
    TransactionDefinition.PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
    TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起。
    TransactionDefinition.PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。
    TransactionDefinition.PROPAGATION_MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
    TransactionDefinition.PROPAGATION_NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。

    展开全文
  • 事物-源码

    2021-02-16 10:06:36
    事物
  • spring事物

    2018-05-22 18:07:05
    spring事物的代码案例。spring事物的代码案例。spring事物的代码案例。
  • 数据库事物

    2020-12-14 15:32:35
    数据库事物 1.事物的四大特性(ACID) 原子性:事物是最小的执行单位,不允许分割,事物的原子性确保动作要么全部完成,要么完全不起作用。 一致性:执行事物前后,数据保持一致,多个事物对同一个数据读取的结果是...
  • mysql事物

    2021-06-07 14:33:26
    事物的四种特性(ACID) 1.原子性 事物是数据库的逻辑最小单位,要么都执行,要么都不执行 2.一致性 事物执行的结果必须从一个一致性状态到另一个一致性状态,如果数据库只包含事物提交成功后结果,就保持了数据的...

    事物的四种特性(ACID)

    1. 原子性
      事物是数据库的逻辑最小单位,要么都执行,要么都不执行
    2. 一致性
      事物执行的结果必须从一个一致性状态到另一个一致性状态,如果数据库只包含事物提交成功后结果,就保持了数据的一致性,如果中途某一阶段提交失败,事物就不是一致性了
    3. 隔离性
      事物之间是相互隔离的,互不影响
    4. 持续性
      事物提交之后,数据库数据就永久性保存,对后面的事物执行不产生影响

    事物的四种隔离级别

    1. 读取未提交数据
      所有事物可以看到其他事物未提交的执行结果,也就是读取未提交的数据(脏读)
    2. 读取提交数据
      一个事物只能看见已提交事物的结果,并可支持不可重复读的数据,也就是一个查询结果可能出现不同的结果,就是在查询的时候有新的commit事件
    3. 可重复读取
      mysql的默认数据隔离级别,同一事物在多个数据读取数据的时候,会看到同样的数据行。同时会有一个问题(幻读)可能读到新插入行的数据,innodb通过多版本控制处理了这个问题
    4. 可串行化
      数据库的最高隔离级别,强制对操作数据进行了排序,造成的影响是超时,效率低下

    分布式事物的处理方式

    分布式系统系统有一个重要的理论CAP原则

    1. 一致性
      每个数据副本的数据保持一致,在对某一个数据操作之后,保持每台机器读到的数据都是更新后的结果
      一致性又分为 强一致性,弱一致性,最终一致性
      强一致性,保证用户在上一次写什么数据,下一次就读到什么数据,强绑定,保证用户的最好体验,但是要牺牲一定的可见性
      弱一致性,用户在写入数据之后并不能保证马上更新到其他系统中,
      最终一致性,系统没有后续操作的情况下,同步数据结果保证最终的数据一致。
    2. 可见性
      就是每一个操作都在一定时间内返回结果,要么成功要么失败
    3. 分区容错性
      是否可以对数据进行分区,保证系统的性能与可扩展性

    两阶段提交协议

    两阶段提交协议是协调所有分布式原子事物参与者,决定提交或者取消的分布式算法。在两阶段提交协议中,有两类参与者,所有副本节点与协调者。
    1. 请求阶段
    在请求阶段,协调者将通知事物参与者 执行commit或者取消事物(回滚)操作,然后进入表决过程,在表决过程中,所有节点将告诉协调者自己的表决结果,
    2. 提交阶段
    提交阶段,协调者将根据第一阶段的表决结果,提交或者取消,当且仅当所有参与者同意提交的时候才会执行提交,否则取消事物,执行者在收到协调者的通知后响应操作

    两阶段提交事物的缺点
    所有参与者都是同步阻塞的,当参与者占用公共资源的时候,第三方参与者将发生阻塞。协调者在其中非常重要 一但发生故障将会影响到整个数据库数据。

    三阶段提交协议

    1. cancommit阶段
    协调者向参与者发送commit的请求,参与者返回yes or no
    2. precommit阶段
    假如协调者受到的信息都是yes ,那么就会预执行,否者事物中断
    3. docommit阶段
    发送提交请求,将会从预提交状态转到提交状态,并向所有参与者发送docommit请求,参与者受到消息后提交事物,并释放当前资源。并反馈响应,协调者受到响应后事物完成。
    否者回滚

    两阶段协议与三阶段协议的不同

    三阶段协议多了个预提交阶段,在两阶段协议上多了个缓冲阶段,保证所有参与者的一致性,两阶段提交协议只有协调者有超时时间的判断

    展开全文
  • MySQL事物事物回滚

    千次阅读 2018-08-18 20:07:44
    什么是事物事物说白了就是一件事从开始发生到结束的整个过程。在MySQL里事务是一组不可被分割执行的SQL语句集合,如果有必要,可以撤销。 这样可以确保数据的一致性。rollback事物回滚,则事物执行失败,保证了...

    什么是事物?

        事物说白了就是一件事从开始发生到结束的整个过程。在MySQL里事务是一组不可被分割执行的SQL语句集合,如果有必要,可以撤销。 这样可以确保数据的一致性。rollback事物回滚,则事物执行失败,保证了数据安全。

    事务和事务回滚的应用

      mysql中默认sql语句会自动commit到数据库,在默认情况下MySQL开启的是autocommit模式,也就是隐含的将每条语句当做一个事务处理,每条SQL都会被自动提交。

    show variables like "autocommit";

    事物应用:开启事物

    mysql> start transaction;
    mysql>… sql命令

     #此时autocommit被禁用,SQL命令不会对数据库中数据做修改

    终止事物

    mysql>commit;
    或
    mysql>rollback;

    注意:事务回滚rollback只针对表记录的操作,增、删、改,对创建库、表的操作无效

    案例:

    建行卡转账农行卡5000

    1. 转账中……
    2. 建行-5000
    3. 农行+5000
    4. commit;转账成功
    5. rollback;回滚,转账失败

    过程模拟

    表1、CCB
      create table CCB(
    name varchar(20),
    money int);
      insert into CCB values("zhuanqian",10000);
    表2、ICBC
      create table ICBC(
      name varchar(20),
      money int);
      insert into ICBC values("shouqian",10000);
    	开始转账
      mysql> start transaction;
      mysql> update CCB set money=5000 where name="zhuanqian";
      mysql> update ICBC set money=...断电了;
      mysql> rollback;
      # select * from CCB 钱并未减少,没有执行命令

    事物的性质

        事务的机制通常被概括为“ACID”原则即原子性(A)、稳定性(C)、隔离性(I)和持久性(D)。
      原子性:构成事务的的所有操作必须是一个逻辑单元,要么全部执行,要么全部不执行。
      稳定性:数据库在事务执行前后状态都必须是稳定的。
      隔离性:事务之间不会相互影响。
      持久性:事务执行成功后必须全部写入磁盘。

    事物的并发问题

           1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据

      2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。

      3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

    事物的隔离级别

    至于事物性质实现原理,以我现水平暂不深入,以后会做深入了解

    事务嵌套

    当执行一个START TRANSACTION指令时,会隐式的执行一个commit操作,就是开启新事务时,自动提交原来的旧事务
    所以没办法开启两个事务,只能通过savepoint来实现嵌套事务

    drop table t;
    create table t(a int, primary key(a));
    begin;
    insert into t(a) values(1);
    SAVEPOINT s;
    insert into t(a) values(2);
    ROLLBACK to SAVEPOINT s;
    commit;
    

    因为异常,事务回滚,保存点的异常向上传播到主事务,主事务也回滚
    表中没有元素

    展开全文
  • 事物JPA入门

    2018-01-24 16:49:37
    事物JPA入门,样例和PPT~事物JPA入门,样例和PPT~事物JPA入门,样例和PPT
  • spring 事物(一)—— 事物详解

    万次阅读 2018-09-06 10:14:00
    事务概念回顾 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. ... 隔离性: 并发访问数据库时,一个用户的事物不被其他事物所干扰,各并发事务之间数据库是独立的; 持久性: 一个事务被提...

    事务概念回顾

    什么是事务?

    事务是逻辑上的一组操作,要么都执行,要么都不执行.

    事物的特性(ACID):

    事务的特性

    1. 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
    2. 一致性: 执行事务前后,数据保持一致;
    3. 隔离性: 并发访问数据库时,一个用户的事物不被其他事物所干扰,各并发事务之间数据库是独立的;
    4. 持久性: 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。

    Spring事务管理接口介绍

    Spring事务管理接口:

    • PlatformTransactionManager: (平台)事务管理器
    • TransactionDefinition:</
    展开全文
  • 随机事物-源码

    2021-02-15 09:46:49
    随机事物
  • 数据事物-源码

    2021-02-15 02:41:17
    数据事物
  • 任何事物-源码

    2021-02-12 19:14:12
    任何事物
  • 智慧事物-源码

    2021-02-09 01:48:44
    智慧事物
  • 命名事物-源码

    2021-02-01 15:07:01
    命名事物
  • spring 事物管理

    2018-09-14 16:24:49
    spring中4种方式实现事物管理,包括常见的注解形式和xml形式。。。。。。
  • spring事物 支持

    2017-07-25 08:12:33
    spring 事物机制
  • 事物事物四大特性

    千次阅读 2017-08-01 22:56:33
    事物(一)——事物四大特性原子性(Atomicity)原子性是事物最小的单元,是不可再分的,对一个数据库小的操作。这些必须同时完成,如果有一个失败了。则一切的操作都全部失败。比如A给B转账,A是一个操作,B也是一...
  • TransactionUtils Spring事物回滚工具类

    万次阅读 2021-09-20 14:39:00
    import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.stereotype.Component;...
  • JDBC事物应用源码文件

    2019-04-21 19:59:42
    JDBC事物应用源码文件JDBC事物应用源码文件JDBC事物应用源码文件
  • 事物事物隔离级别

    2017-01-03 11:42:29
    什么是事物 事物是访问数据库的一个操作序列,数据库应用系统通过事物集来完成对数据库的存取。事物的正确执行使得数据库从一种状态转换为另一种状态。 事物必须服从ISO/IEC所制定的ACID原则。ACID是原子性...
  • 什么是事物事物是关系型数据库中,由一组sql组成的执行单元,该单元要么整体成功,要么整体失败。 事物的ACID特性 事物ACID特性,原子性,一致性,隔离性,持久性,这4个属性统称为ACID特性。 原子性:指事物...
  • 通过实践学习 通过构建事物来学习事物 Postgres: 尝试在负载下运行db并执行以下操作:置备,修补,备份,恢复,故障检测和修复。
  • 该版本支持事物处理,可进行副本集搭建,springboot通过注入事物可实现事物处理
  • ssm事物配置

    2017-09-22 21:12:21
    ssm事物配置,jsp页面的操作。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
  • 事物回滚文档

    2012-10-30 13:31:11
    事物回滚
  • 事物隔离级别 事物隔离级别是为解决脏读、幻读、不可重复读 脏读:尚未被确定提交的数据被其他事物读取到 幻读:进行select时间点上的数据与之后实际的情况不同,即会新增数据 不可重复读: 同一数据同时被多...
  • 分布式事物.txt

    2019-05-22 16:50:00
    微服务分布式事物视频详解,TCC,BASE,MQ,2PC,最终一致
  • 事物管理链接-源码

    2021-02-23 12:25:16
    事物管理链接
  • 注释事物控制

    2014-09-01 15:32:58
    spring事物控制 springmvc+hibernate

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 519,097
精华内容 207,638
关键字:

事物