事务处理

JDBC中如何进行事务处理?

亡梦爱人 提交于 2019-12-02 02:04:18
Connection提供了事务处理的方法,通过调用setAutoCommit(false)可以设置手动提交事务;当事务完成后用commit()显式提交事务;如果在事务处理过程中发生异常则通过rollback()进行事务回滚。除此之外,从JDBC 3.0中还引入了Savepoint(保存点)的概念,允许通过代码设置保存点并让事务回滚到指定的保存点。 来源: https://www.cnblogs.com/Yanss/p/11724977.html

ent 基本使用十九 事务处理

点点圈 提交于 2019-12-01 10:03:59
ent 生成的代码中client 提供了比较全的事务处理 启动单个事务进行处理 // GenTx generates group of entities in a transaction. func GenTx(ctx context.Context, client *ent.Client) error { tx, err := client.Tx(ctx) if err != nil { return fmt.Errorf("starting a transaction: %v", err) } hub, err := tx.Group. Create(). SetName("Github"). Save(ctx) if err != nil { return rollback(tx, fmt.Errorf("failed creating the group: %v", err)) } // Create the admin of the group. dan, err := tx.User. Create(). SetAge(29). SetName("Dan"). AddManage(hub). Save(ctx) if err != nil { return rollback(tx, err) } // Create user "Ariel". a8m, err :=

SpringBoot之事务处理机制

非 Y 不嫁゛ 提交于 2019-11-30 22:55:30
一、 Spring的事务机制 所有的数据访问技术都有事务处理机制,这些技术提供了 API用来开启事务、提交事务来完成数据操作,或者在发生错误的时候回滚数据。 而 Spring的事务机制是用统一的机制来处理不同数据访问技术的事务处理。Spring的事务机制提供了一个PlatformTransactionManager接口,不同的数据访问技术的事务使用不同的接口实现: 在程序中定义事务管理器的代码如下: @Bean public PlatformTransactionManager transactionManager() { JpaTransactionManager transactionManager = new JpaTransactionManager(); transactionManager.setDataSource(dataSource()); return transactionManager; } 二、声明式事务 Spring支持声明式事务,即使用注解来选择需要使用事务的方法,它使用@Transactional注解在方法上表明该方法需要事务支持。 @Transactional public void saveSomething(Long id, String name) { //数据库操作 } 在此处需要特别注意的是,此 @Transactional注解来自org

mysql引擎区别

天涯浪子 提交于 2019-11-30 21:51:19
数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在缺省情况下,MYSQL支持三个引擎:ISAM、MYISAM和HEAP。另外两种类型INNODB和BERKLEY(BDB),也常常可以使用。如果技术高超,还可以使用MySQL+API自己做一个引擎。下面介绍几种数据库引擎: ISAM:ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到 数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不 支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实 时数据,通过其复制特性,MYSQL能够支持这样的备份应用程序。 MyISAM:MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMCHK工具和用来恢复浪费空间的 MyISAMPACK工具

mysql引擎区别

家住魔仙堡 提交于 2019-11-30 21:42:23
数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在缺省情况下,MYSQL支持三个引擎:ISAM、MYISAM和HEAP。另外两种类型INNODB和BERKLEY(BDB),也常常可以使用。如果技术高超,还可以使用MySQL+API自己做一个引擎。下面介绍几种数据库引擎: ISAM:ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到 数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不 支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实 时数据,通过其复制特性,MYSQL能够支持这样的备份应用程序。 MyISAM:MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMCHK工具和用来恢复浪费空间的 MyISAMPACK工具

Spring的事务处理

旧时模样 提交于 2019-11-30 05:45:20
事务:一次对数据库的操作就叫做事务,应该符合数据库事务的ACID(原子性、一致性、隔离性、持久性) 一、注解方式 添加tx类标签 或者手动引入 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www

分布式事务处理机制

£可爱£侵袭症+ 提交于 2019-11-30 04:38:10
为什么有分布式事务 由于业务数据量非常巨大,如淘宝电商系统,后端肯定是分库分表的。因为单个数据库数据量压上来,系统就会产生性能瓶颈。库存和订单分别在不同数据库中。交易系统、库存系统、订单系统。【微服务架构中,像淘宝光一个下单链路可能会涉及10多个系统以上】如果下订单失败库存系统必须回滚数据,保证数据强一致性。 分布式事务种类 数据库的2PC(两阶段提交)又叫做 XA Transactions,强一致性、性能不高 补偿事务(TCC),记住3个单词 try、confirm、cancel,逻辑简单 消息事务,最终一致性,性能好 2PC(两阶段提交):2阶段提交是分布式事务传统解决方案,目测银行保险都喜欢用这个。 当事务跨越多个节点时,为了保持事务ACID,引入了协调者、参与者 第一阶段:事务协调器要求每个涉及到事务的数据库预提交(precommit)此操作,并反映是否可以提交. 第二阶段:事务协调器要求每个数据库提交数据。 缺点:2PC效率很低,对高并发很不友好 两阶段提交涉及多次节点的网络通信,导致通信时间过长。 非常容易造成长事务,锁定资源时间太长,资源等待时间增多。 大部分高并发场景都应该避免使用。 补偿事务TCC Try 阶段,对业务系统做检测和资源预留 Confirm 阶段对业务系统做确认提交,默认:Try执行成功,Confirm一定成功 Cancel 阶段在业务执行失败

Mysql并发控制

杀马特。学长 韩版系。学妹 提交于 2019-11-29 13:15:55
最近在看Mysql的并发控制,事务处理等知识,做些整理。 并发控制目的是当多个连接对数据库进行修改时保证数据的一致性。现在mysql的InnoDB在update,delete时使用行级锁,对于select会结合MVCC保证一致性。 1、 并发控制 MySQL提供两个级别的并发控制:服务器级(the server level)和存储引擎级(the storage engine level)。加锁是实现并发控制的基本方法,MySQL中锁的粒度: (1) 表级锁:MySQL独立于存储引擎提供表锁,例如,对于ALTER TABLE语句,服务器提供表锁(table-level lock)。 (2) 行级锁:InnoDB和Falcon存储引擎提供行级锁,此外,BDB支持页级锁。InnoDB的并发控制机制,下节详细讨论。 另外,值得一提的是,MySQL的一些存储引擎(如InnoDB、BDB)除了使用封锁机制外,还同时结合MVCC机制,即 多版本两阶段封锁协议MVCC(Multiversion two-phrase locking protocal) ,来实现事务的并发控制,从而使得只读事务不用等待锁,提高了事务的并发性。 数据库的事务处理的原则是保证ACID的正确性。 2、事务处理 2.1 事务的ACID特性 事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性: (1)原子性

Springboot数据库事务处理

一笑奈何 提交于 2019-11-29 11:49:09
在互联网数据库的使用中,对于电商和金融网站可能面对高并发场景。因为存在高并发,数据库的数据将在一个多事务的场景下运行,在没有采取一定的手段的情况下就会造成数据的不一致。与此同时,网站也会面临巨大的性能压力。面对这样的高并发场景,数据库的事务机制是至关重要的,它能够帮助我们在一定的程度上保证数据的一致性,并且有效提高系统性能,避免系统宕机。 springboot配置数据库信息 spring.datasource.url=jdbc:mysql://localhost:3306/spring_boot_chapter06?serverTimezone=UTC spring.datasource.username=root spring.datasource.password=root #spring.datasource.driver-class-name=com.mysql.jdbc.Driver #最大等待连接数,设0为没有限制 spring.datasource.tomcat.max-idle=10 #最大等待毫秒数,单位ms,超过时间会出错误信息 spring.datasource.tomcat.max-wait=10000 #数据库连接池初始化连接数 spring.datasource.tomcat.initial-size=5 #日志配置 #logging.level

redis的事务处理

偶尔善良 提交于 2019-11-29 09:55:23
1、redis事务可以依次执行多个命令,并且带有以下三个重要的保证: 批量操作在发送exec命令前被放入队列缓存。 收到exec命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。 2、一个事务从开始到执行会经历一下三个阶段: 开始事务 命令入队 执行事务 3、事务处理相关命令 命令名称: multi 语法:multi 功能: 标记一个事务块的开始 返回值: 总是返回OK 命令名称: exec 语法:exec 功能: 执行所有事务块内的命令。 返回值: 事务块内所有命令的返回值,按命令执行的先后顺序排列。 当操作被打断时,返回空值nil。 命令名称: discard 语法:discard 功能: 取消事务,放弃执行事务块内的所有命令。 返回值: 总是返回OK 命令名称: watch 语法:watch key [key……] 功能: 监视一个(或多个)key,如果在事务执行之前这个(或这些)key被其他命令所改动,那么事务将被打断。 返回值: 总是返回OK 命令名称: unwatch 语法:unwatch 功能: 取消watch命令对所有key的监视。 如果在执行watch命令之后,exec命令或discard命令先被执行了的话,那么久不需要再执行unwatch了 返回值:总是返回OK 来源: