首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏侯哥的Python分享

    MySQL基础9-事务

    一、事务简介   事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有操作作为一个整体一起向系统提交或者撤销操作请求,即这些操作要么同时成功,要么同时失败。 mysql的事务默认是自动提交的,也就是说,当执行一条DML语句,Mysql会立即隐式的提交事务 二、事务操作   2.1 查看事务提交方式    select@@autocommit;   2.2 设置事务提交方式 四、事务的并发问题 脏读:一个事务读到另外一个还未提交的事务中修改的数据。 不可重复读:一个事务读取到了另一个已经提交了事务中的修改的数据。 说明5:在一个事务中查询到其他未提交的事务修改的数据叫脏读,查询到其他已经提交的事务修改的数据叫不可重复读 九、幻读的案例    说明1:多个事务并发时,一个事务新增了数据,并提交,在另外一个事务中查询不到

    31310编辑于 2023-09-01
  • 来自专栏JavaEdge

    精通Java事务编程(9)-总结

    事务作为抽象层,允许应用忽略DB 内部一些复杂并发问题和某些硬件、软件故障,简化应用层的处理逻辑:事务中止(transaction abort),而应用仅需重试。 对复杂访问模式,事务可大大减少需要考虑的潜在错误情景数量。 如没有事务,各种错误情况(进程崩溃,网络中断,停电,磁盘已满,意外并发)意味着数据可能各种不一致。如非规范化的数据可能很容易与源数据不同步。 几乎所有事务实现都可防止 读倾斜(不可重复读) 同一个事务中,客户端在不同时间点看见数据库不同值。 只有可串行化隔离级别能防所有这些问题,有三种不同实现方案: 严格串行执行事务 若每个事务的执行很快,且单CPU核即可满足事务吞吐要求,这是简单有效的选择 2PL 数十年来,一直是可串行化的标准实现 使用乐观锁机制,允许事务并发执行而不互相阻塞。仅当事务提交时,才检查可能的冲突,若发现违背串行化,则中止事务

    49730编辑于 2022-07-25
  • 来自专栏微光点亮星辰

    Oracle 与 MySQL 的差异分析(9):事务

    Oracle 与 MySQL 的差异分析(9):事务 1 自动提交 1.1Oracle 默认不会自动提交,需要显式的提交或回滚。如果断开连接时有未提交事务,客户端工具一般可以配置自动提交或回滚。 1.2 MySQL InnoDB支持事务,默认是自动提交的。 注:在开启自动提交情况下,可以用starttransaction; 开启一个事务,然后就不会自动提交了。 3 事务隔离级别 SQL标准中定义的隔离级别,隔离级别越高,并发性越差。 (1)Read Uncommitted: B会话可以看到A会话未提交事务修改的数据(脏数据)。 3.2 MySQL InnoDB默认事务隔离级别是Repeatable,其它几种也支持。

    1.3K31发布于 2020-04-10
  • 来自专栏Java-SpringCloud相关

    Java学习笔记-微服务(9)-终-分布式事务Seata

    Seata在微服务中,一定存在多个数据库,那么多个数据库间如何处理分布式事务?对于分布式事务问题,有哪些解决方案?一次业务操作需要跨多个数据源或系统进行远程调用时,就会产生分布式事务问题。 但关系型数据库提供的能力是基于单机事务的,一旦遇到分布式事务场景,就需要通过其他技术手段来解决事务问题。单体应用被拆分为微服务应用,原来的多个模块被拆分为多个应用,就有多个数据源。 扩展问题:@Transactional 失效的场景Seata 工作流程Seata 1+3 事务控制:XID:XID 是全局事务的唯一标识,它可以在服务的调用链路中传递,绑定到服务的事务上下文中。 TC Transaction Coordinator:事务协调者(Seata 本体,负责维护全局事务和分支事务的状态,驱动全局事务提交或回滚)TM Transaction Manager:事务管理者(标注了 (数据库本体,可以是多个 RM,负责管理分支事务上的资源,向 TC 注册分支事务,汇报事务状态,驱动分支事务的提交和回滚)TC 以服务器形式独立部署,TM 和 RM 以 Seata Client 的形式集成在微服务中

    53210编辑于 2025-03-09
  • 来自专栏Happy的分享

    【快学springboot】9.使用 @Transactional 注解配置事务管理

    Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。 可以手动指定其他的事务传播行为,如下: Propagation.REQUIRED 如果当前存在事务,则加入该事务,如果当前不存在事务,则创建一个新的事务。 Propagation.SUPPORTS 如果当前存在事务,则加入该事务;如果当前不存在事务,则以非事务的方式继续运行。 Propagation.NOT_SUPPORTED 以非事务的方式运行,如果当前存在事务,暂停当前的事务。 Propagation.NEVER 以非事务的方式运行,如果当前存在事务,则抛出异常。 Propagation.NESTED 如果没有,就新建一个事务;如果有,就在当前事务中嵌套其他事务

    2.2K20发布于 2019-07-16
  • 来自专栏全栈程序员必看

    java 事务嵌套_Java事务以及嵌套事务

    最近遇到事务的处理,嵌套事务,自己研究,整理一下。 1 先看结论 1、在Java事务中,事务的嵌套,如果有事务成功,那么则都成功,否则都不会成功。 结论:并行事务不存在事务影响 4.2 场景:嵌套相同事务 a) 事务嵌套,在同一个事务中,没有对异常进行处理 @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest { @Autowired UserService userService; @Test public void test5() { userService.addUser9(); } } @Service Autowired UserRepository userRepository; @Transactional(rollbackFor = Exception.class) public void addUser9( ) { userRepository.save(new User(“user9”)); this.addUser10(new User(“user10”)); } @Transactional(propagation

    3.7K10编辑于 2022-11-07
  • Java中非事务控制事务

    欢迎关注微信公众号:数据科学与艺术 作者WX:superhe199 标题: Java中非事务控制事务 本文探讨Java中非事务控制事务的实践和应用。 在本文中,我们将讨论如何使用Java编程语言实现这些非事务控制事务,并提供一些具体的案例分析。 首先,让我们明确什么是非事务控制事务。 与传统的数据库事务不同,非事务控制事务是指在没有数据库事务的支持下,通过编程技术模拟出一些类似事务的特性。在这种情况下,我们需要保证一系列操作的原子性、一致性、隔离性和持久性。 如果转账成功,提交事务,并关闭数据库连接。 下面是一个示例代码,展示了如何在Java中实现这个非事务控制事务的转账功能。 总结: 在本文中,我们介绍了在Java中实现非事务控制事务的方法,并通过一个简单的案例分析进行了说明。非事务控制事务是一种在没有数据库事务支持的情况下,通过编程技术模拟出类似事务的特性的方法。

    18810编辑于 2025-08-29
  • 来自专栏全栈程序员必看

    java事务_Java 事务详解

    一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 二、Hibernate事务处理 (1)Hibernate事务处理 在Hibernate框架中,使用Transaction接口来维护了事务实现(JTA,JDBC)的抽象。 void rollback() 强制此事务回滚。 void setTimeout(int seconds) 它为由此实例开始的后续调用启动的任何事务设置事务超时。 Session,启动事务,执行所有与数据相关的工作,结束事务并关闭Session。 一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接。

    1.9K20编辑于 2022-11-04
  • 来自专栏springBoot3.0

    事务

    所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。 《MySQL 技术内幕:InnoDB 存储引擎(第 2 版)》7.7 章这样写到: InnoDB 存储引擎提供了对 XA 事务的支持,并通过 XA 事务来支持分布式事务的实现。 分布式事务指的是允许多个独立的事务资源(transactional resources)参与到一个全局的事务中。事务资源通常是关系型数据库系统,但也可以是其他类型的资源。 全局事务要求在其中的所有参与的事务要么都提交,要么都回滚,这对于事务原有的 ACID 要求又有了提高。 解决幻读的方式主要有以下几种: 将事务隔离级别调整为 SERIALIZABLE 。 在可重复读的事务级别下,给事务操作的这张表添加表锁。

    76020编辑于 2023-03-06
  • 来自专栏基础知识文章

    事务

    1.事务处理 1.事务的概念 事务是针对数据库的一组操作, 它可以由-一条或多条SQL语句组成。 2.事务的基本操作 在默认情况下,用户执行的每一条SQL语句都会被当成单独的事务自动提交。 COMMIT; 如果不想提交当前事务,可以取消事务(即回滚)。 ROLLBACK; 事务的执行要么成功,要么就返回到事务开始前的状态,这就保证了同一事务操作的同步性和数据的完整性。 MySQL中的事务必须满足A、C、I、D这4个基本特性。 Atomicity: 原子性 一个事务必须被视为一个不可分割的最小工作单元,只有事务中所有的数据库操作都执行成功,才算整个事务执行成功。 Isolation: 隔离性 隔离性是指当一个事务在执行时,不会受到其他事务的影响。保证了未完成事务的所有操作与数据库系统的隔离,直到事务完成为止,才能看到事务的执行结果。 为了保证这些事务之间不受影响,对事务设置隔离级是十分必要的。

    71330编辑于 2022-05-05
  • 来自专栏全栈程序员必看

    Java 事务注解(注解式事务)

    spring中的@Transactional(rollbackFor = Exception.class)事务处理,当你的方法中抛出异常时,它会将 事务回滚,数据库中的数据将不会改变,也就是回到进入此方法前的状态 rollbackFor=Exception.class) 2 让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class) 3 不需要事务管理的

    2K30编辑于 2022-07-29
  • 来自专栏跟着阿笨一起玩NET

    .NET事务 隐式事务(TransactionScope) 显示事务(CommittableTransaction) WebService(TransactionOption)

    、速度快,但功能简单,只能管理单一对象和单一持久资源间的事务,比如想在数据库 B 插入失败,则回滚对数据库 A 的操作,就无法用这种 ADO.NET 显式事务来实现。  分布式隐式事务(TransactionScope) 隐式事务不具有Commit、Roolback方法。 Enlist默认为true,SqlClient会自动检测是否存在事务,如果有事务,则自动登记到事务中。 ,因为Web Service方法只能用作事务中的根对象。 PS:WEB服务方法的TransactionOption默认属性为Disabled 提交事务ContextUtil.SetComplete(); 回滚事务ContextUtil.SetAbort();

    1.3K10发布于 2018-09-19
  • 来自专栏程序猿人

    事务及分布式事务

    事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。 这些操作要么都做,要么都不做,是一个不可分割的工作单位。 本地事务 本地事务要求符合ACID的特性: 1. Mysql的undo log记录了事务修改操作之前的数据,用于在当前事务发生回滚的时候,使该条数据状态恢复到事务开始前的状态。 2. Mysql中的Innodb引擎支持事务,有4个隔离级别: 读-未提交 读-未提交是说一个事务(假设A)可以读到其他事务(假设B)尚未提交的数据。 是一种无锁并发控制,原理是通过为事务分配单项增长的事务ID,并为每行数据保存一个版本链,版本链上的数据与修改它的事务ID相关联。 一部分是把大事务拆分为若干个小事务,将整个分布式事务T分解为n个子事务,我们命名T1,T2,...,Ti,...,Tn。每个子事务都应该、或者能被看做是原子行为。

    2.2K21发布于 2021-04-25
  • 来自专栏CSDN 迁移文章

    Spring 事务事务传播机制

    事务的回顾 在 MySQL 学习阶段,已经了解到了事务是一组操作的集合,也就是把所有的操作作为一个整体,一起向数据库提交或者撤销操作,要么同时成功,要么同时失败 一个事务的操作流程包括了,开启事务,执行事务操作 ,提交事务或回滚事务,对于回滚事务来说,如果程序在执行过程中出现了错误,那么此时就需要执行回滚事务 2. 编程式事务 Spring 手动操作事务和 MySQL 操作事务类似,也是分为开启事务,提交事务,回滚事务等三个操作,需要用到 DataSourceTransactionManager (事务管理器)来进行上述事务的操作 事务传播机制 事务传播机制是指在多个事务方法相互调用时,定义事务如何在这些方法之间传播的规则,也就是延用调用方法的事务还是再重新开启一个新事务 Spring 事务的传播机制有以下七种 事务传播机制 描述 B 以非事务方式执行,如果 A 有事务就抛出异常 Propagation.NESTED 如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行。

    61610编辑于 2024-12-20
  • 来自专栏技术栈

    分布式事务之Spring事务与JMS事务(二)

    Spring事务 Spring事务机制主要包括声明式事务和编程式事务,声明式事务让我们从复杂的事务处理中得到解脱,编程式事务在实际开发中得不到广泛使用,仅供学习参考。 事务抽象 spring的事务管理提供了统一的API接口支持不同的资源,提供声明式事务管企且方便与Spring框架集成。 Spring在TransactionDefinition接口中规定了 7 种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播: 事务传播行为类型: 事务传播行为类型 说明 PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。 PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。

    2.3K10发布于 2019-07-31
  • 来自专栏黄啊码【CSDN同名】

    【黄啊码】MySQL入门—9、什么?都2022了,还不知道什么是事务

    我说:用数据库的事务不就行了?然而她说了一句:啥是事务? 那今天我们就讲讲事务的相关内容: 事务的特性是什么? 事务的特性:要么完全执行,要么都不执行。 它指的是每个事务都是彼此独立的,不会受到其他事务的执行影响。也就是说一个事务在提交之前,对其他事务都是不可见的。 最后一个 D,指的是持久性(Durability)。 因为当事务完成,数据库的日志就会被更新,这时可以通过日志,让系统恢复到最后一次成功的更新状态。 事务的控制 当我们了解了事务的特性后,再来看下如何使用事务。 SET TRANSACTION,设置事务的隔离级别。 注:使用事务有两种方式,分别为隐式事务和显式事务。 completion=1,这种情况下,当我们提交事务后,相当于执行了 COMMIT AND CHAIN,也就是开启一个链式事务,即当我们提交事务之后会开启一个相同隔离级别的事务 completion=2

    45030编辑于 2022-10-24
  • Spring事务事务传播机制

    1.事务 1.1 什么是事务? 事务是一组操作的集合,是一个不可分割的操作. 事务会把所有的操作作为一个整体,一起向数据库提交或者是撤销操作请求.所以这组操作要么同时成功,要么同时失败。 ,回滚事务) -- 开启事务 start transaction; -- 提交事务 commit; -- 回滚事务 rollback; 2.Spring中事务的实现 Spring中的事务操作分为两类 事务管理器.用来获取事务(开启事务)提交或回滚事务 TransactionDefinition是事务的属性,在获取事务的时候需要将TransactionDefinition传递进去从而获得一个事务 Spring事务传播机制有以下7种: Propagation.REQUIRED:默认的事务传播级别.如果当前存在事务,则加入该事务.如果当前没有事务,则创建一个新的事务。 最终结果是两个数据都没有添加 p1事务可以认为是父事务,嵌套事务是子事务.父事务出现异常,子事务也会回滚,子事务出现异常,如果不进行处理,也会导致父事务回滚。

    24310编辑于 2026-01-12
  • 来自专栏程序员的日常

    Spring | 事务原理与实践 - 声明式事务及编程式事务

    Shadow Paging(影子页表)^https://zh.wikipedia.org/wiki/%E5%BD%B1%E5%AD%90%E5%88%86%E9%A1%B5:这种方式下,数据修改不会直接在原数据上进行 通过正确的事务管理,我们可以在事务执行和结束时满足这些约束,从而确保数据的完整性。1.2.3 事务的隔离级别事务的隔离级别定义了一个事务可能会受到其他并发事务的影响程度。 3.2.1 嵌套事务嵌套事务中,主事务包含多个子事务,每个子事务都可以单独提交和回滚。如果主事务失败,所有子事务都会回滚。 Spring定义了7种传播行为:REQUIRED:支持当前事务,如果没有事务则创建新事务。SUPPORTS:支持当前事务,如果没有事务则以非事务方式执行。 MANDATORY:支持当前事务,如果没有事务则抛出异常。REQUIRES_NEW:创建新事务,如果有当前事务,则将当前事务挂起。

    4.8K134编辑于 2023-09-27
  • 来自专栏全栈程序员必看

    saga分布式事务_本地事务和分布式事务

    ,并且由事务协调者来协调所有事务参与者,如果准备阶段所有事务参与者都预留资源成功,则进行第二阶段的资源提交,否则事务协调者回滚资源。 1、第一阶段:准备阶段 由事务协调者询问通知各个事务参与者,是否准备好了执行事务,具体流程图如下: ① 协调者向所有参与者发送事务内容,询问是否可以提交事务,并等待答复 ② 各参与者执行本地事务操作, 四、Saga事务: 1、什么是Saga事务: Saga 事务核心思想是将长事务拆分为多个本地短事务并依次正常提交,如果所有短事务均执行成功,那么分布式事务提交;如果出现某个参与者执行本地事务失败 事务主动发起方需要额外新建事务消息表,并在本地事务中完成业务处理和记录事务消息,并轮询事务消息表的数据发送事务消息,事务被动方基于消息中间件消费事务消息表中的事务。 如果是业务上处理失败,事务被动方可以发消息给事务主动方回滚事务 如果事务被动方已经消费了消息,事务主动方需要回滚事务的话,需要发消息通知事务主动方进行回滚事务

    3.7K30编辑于 2022-10-05
  • 来自专栏多线程

    【Redis】Redis 事务事务

    一个队列中,一次性、顺序性、排他性的执行一系列命令 二、事务基本指令 multi:设定事务的开启位置,此指令执行后,后续的所有指令均加入到事务中 exec:设定事务的结束位置,同时执行事务,与multi discard使multi失效,放弃当前任务队列,中止事务 三、事务的工作流程 set执行流程:  正常执行,返回执行结果 multi执行流程:  创建事务队列后返回ok 创建事务后,set执行流程 :  将set指令放入事务队列 创建事务后,del执行流程:  将del指令放入事务队列 创建事务后,exec执行流程:  顺序执行事务队列中的指令,并销毁队列 创建事务后,discard执行流程 :  放弃执行队列中的指令,直接销毁队列,返回执行结果 四、事务中指令出错处理 开启事务后,如果放入队列的指令存在语法错误,将会执行discard,当前事务队列会被销毁 开启事务后,如果放入队列的指令并没有语法错误 客户端B修改客户端A监视的age 客户端A执行exec,执行失败,此时事务也不存在了 逻辑上,我们应该先监视数据,然后开启事务准备操作,所以不允许先multi开启事务后watch 2.

    59521编辑于 2023-10-24
领券