事务管理

mysql原理~GTID综合

纵饮孤独 提交于 2019-11-26 20:21:51
1 简介 就是全局事务ID(global transaction identifier ) 属于全局唯一 2 构成 uuid+transaction_id 3 格式 7a07cd08-ac1b-11e2-9fcf-0010184e9e08:1-N binlog SET @@SESSION.GTID_NEXT= '' 4 概念和变量解读 1 Previous-GTIDs 可以看出,每个binlog开头都记录着从GTID开启到这个binlog之前的binlog文件GTID执行事务的总和,即便不开启GTID,也会记录 2 gtid_executed表 1 状态:不可以手动更改 2 内容:已经执行过的事务GTID总和,RESET MASTER会清空此值 3 mysql5.6记录在内存中,所以需要开启中继日志记录进行持久化(GTID_LOG_EVENT) mysql5.7 为一个innodb_table实现持久化 从库就不需要开启中级日志了 4 触发更改内容(适用于gtid_executed gtid_purged变量) 1 set global gtid_purged='' 常见于搭建从库 2 reset master 清空 executed表 3 gtid_purged 状态:可以手动更改 内容:已经被删除的binlog的事务GTID,它是GTID_EXECUTED的子集 4 gtid

Spring Transaction 事务模拟

孤街醉人 提交于 2019-11-26 20:02:01
事务,是描述一组操作的抽象,比如对数据库的一组操作,要么全部成功,要么全部失败。 事务有四个特性: Atomicity(原子性),Consistency(一致性),Isolation(隔离性),Durability(持久性) Spring对事务的支持很强大,但是从本质上来说,事务是否生效取决于数据库底层是否支持(MySQL的MyISAM引擎不支持事务), 同时,一个事务的多个操作需要在同一个connection上。下面手写一个Demo分析Spring事务底层实现。 工程结构 connection部分 Spring在配置多个数据源DataSource时,需要通过DataSource来得到操作数据库的管道Connection。 import java.sql.Connection; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; import javax.sql.DataSource; public class ConnectionHolder { //map存放的数据源与连接管道的映射 private Map<DataSource, Connection> map= new HashMap<DataSource, Connection>(); /

SpringBoot事务

孤者浪人 提交于 2019-11-26 19:51:04
重要概念 自动提交模式 对于mysql数据库,默认情况下,数据库处于自动提交模式。每一条语句处于一个单独的事务中,在这条语句执行完毕时,如果执行成功则隐式的提交事务,如果执行失败则隐式的回滚事务。对于正常的事务管理,是一组相关的操作处于一个事务之中,因此必须关闭数据库的自动提交模式,下面是查看方式: 查看是否自动提交命令(ON表示开启自动提交,值为1,OFF表示关闭自动提交,值为0): show variables like 'autocommit'; 关闭自动提交后,则用户将一直处于某个事务中,直到执行一条commit提交或rollback语句才会结束当前事务重新开始一个新的事务。 DataSource connection = masterDataSource.getConnection(); connection.setAutoCommit(false); 事务隔离级别 隔离级别是指若干个并发的事务之间的隔离程度。TransactionDefinition 接口中定义了五个表示隔离级别的常量: TransactionDefinition.ISOLATION_DEFAULT:这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是TransactionDefinition.ISOLATION_READ_COMMITTED。

hibernate1+基础入门

こ雲淡風輕ζ 提交于 2019-11-26 16:17:34
第1章 hibernate 和 ORM 的概念部分 1.1 Hibrenate 概述 Hibernate是一种 Java 语言下的 对象关系映射 解决方案。它是使用 GNU宽通用公共许可证 发行的 自由 、 开源 的软件。它为 面向对象 的 领域模型 到传统的 关系型数据库 的映射,提供了一个使用方便的 持久化框架 。 Hibernate框架是Java持久层框架之一,它的设计目标是将软件开发人员从大量相同的 数据持久层 相关编程工作中解放出来。无论是从设计草案还是从一个 遗留 数据库开始,开发人员都可以采用Hibernate。Hibernate不仅负责从Java 类 到数据库表的映射(还包括从Java数据类型到SQL数据类型的映射),还提供了面向对象的数据查询检索机制,从而极大地缩短了手动处理 SQL 和 JDBC 上的开发时间,由于它具有简单易学、灵活性强、扩展性强等特点,能够大大地简化程序的代码量,提高工作效率,因此受到广大开发人员的喜爱。 Hibernate是一个开放源代码的ORM框架,它对JDBC进行了轻量级的对象封装,使得Java开发人员可以使用面向对象的编程思想来操作数据库。 1.2 ORM 概述 Object Relation Mapping 对象关系映射。 对象 -关系映射(OBJECT/RELATIONALMAPPING,简称ORM),是随着面向对象的

springboot+mybatis 使用事务

无人久伴 提交于 2019-11-26 13:03:00
一、一些概念 声明式的事务管理是基于AOP的,在springboot中可以通过@Transactional注解的方式获得支持,这种方式的优点是: 1)非侵入式,业务逻辑不受事务管理代码的污染。 2)方法级别的事务回滚,合理划分方法的粒度可以做到符合各种业务场景的事务管理。 本文使用目前最常用的mybatis框架来配置springboot的事务管理机制。下面进入配置方法介绍。 二、开启事务 一个注解很简单 @EnableTransactionManagement //开始事务 三、Service 在设计service层的时候,应该合理的抽象出方法包含的内容。 然后将方法用@Trasactional注解注释,默认的话在抛出Exception.class异常的时候,就会触发方法中所有数据库操作回滚,当然这指的是增、删、改。 当然,@Transational方法是可以带参数的,具体的参数解释如下: 属性 类型 描述 value String 可选的限定描述符,指定使用的事务管理器 propagation enum: Propagation 可选的事务传播行为设置 isolation enum: Isolation 可选的事务隔离级别设置 readOnly boolean 读写或只读事务,默认读写 timeout int (in seconds granularity) 事务超时时间设置

LCN分布式事务使用

*爱你&永不变心* 提交于 2019-11-26 07:30:46
参考网址: https://www.txlcn.org/en-us/docs/demo/dubbo.html 目的:用户多个模块之间的事务的管理,保持数据的一致性 联通实验室测试 1.启动redis 192.168.100.2服务器上面的 /usr/local/ 2.启动 txlcn-tm 192.168.100.2服务器,端口 http://192.168.100.2:7970 密码codingapi 注意: 1.打包命令:mvn clean package -Dmaven.test.skip=true 2.j ar报没有main函数,pom.xml加上 <!-- 解决 SpringBoot 打包成 jar 后运行提示没有主清单属性 --> < plugin > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-maven-plugin </ artifactId > < executions > < execution > < goals > < goal > repackage </ goal > </ goals > </ execution > </ executions > < configuration > < mainClass > com.codingapi

spring下春注解的声明式事务控制

我与影子孤独终老i 提交于 2019-11-25 22:10:27
package com.hope.test;import com.hope.domain.Account;import com.hope.service.IAccountService;import config.SpringConfiguration;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.ComponentScans;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context

一篇文章彻底搞懂“分布式事务”

纵然是瞬间 提交于 2019-11-25 22:06:38
分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在这几年越来越火的微服务架构中,几乎可以说是无法避免。 本篇文章将通过详解分布式事务的一致性,以及分布式事务实战解决方案,帮助大家搞懂分布式事务,推荐收藏。 01 为什么需要分布式事务 由于近十年互联网的发展非常迅速,很多网站的访问越来越大,集中式环境已经不能满足业务的需要了,只能按照业务为单位进行数据拆分(包含:垂直拆分与水平拆分),以及按照业务为单位提供服务,从早期的集中式转变为面向服务架构的分布式应用环境。 举一个典型的例子,阿里的淘宝网站随着访问量越来越大,只能按照商品、订单、用户、店铺等业务为单位进行数据库拆分,以及按照业务为单位提供服务接口。 这个时候 为了完成一个简单的业务功能,比如:购买商品后扣款,有可能需要横跨多个服务,涉及用户订单、商品库存、支付等多个数据库,而这些操作又需要在同一个事务中完,这就涉及到到了分布式事务。 本质上来说,分布式事务就是为了保证不同资源服务器的数据一致性。 02 分布式的一致性理论 最早加州大学伯克利分校 Eric Brewer教授提出一个分布式系统特性的CAP理论。 1.CAP 理论的不可能三角 一致性(Consistency) 可用性(Availability) 分区容错性(Partition tolerance) 在分布式系统中

没有宫廷内斗,数据库界的延禧攻略

那年仲夏 提交于 2019-11-25 21:07:31
各位老铁们,你们有没有想老张,最近老张的才华被工作的繁忙所限制了,所以一直没时间更博,今儿个时隔数日我们终于再次见面啦(很开心)!最近有部特别火的宫廷戏,不知道大家有没有看,剧名叫做《延禧攻略》,讲述得是一个宫女,一路过关斩将,最后成为皇上最宠爱的令贵妃的故事。加上我本人巨爱这类题材,所以痴迷得不得了。(好像暴露了自己没有更博的真正原因哈哈)。宫廷类的剧,都是后宫嫔妃之间的尔虞吾诈,勾心斗角,有你没我,有我没你的残酷事实。胜者为王,败者为寇这种思想好像从古代就一直延续到今日。非要分出个胜负,分出个谁好,谁坏才罢休。 在数据库领域也会有此类问题,老张我混迹开源数据库圈多年。MySQL数据库占领着开源数据库的头把交椅,MongoDB占领着NoSQL数据库的第一位。我们来看下数据库的整体排名情况; 两者都是第一,所有总会拿来比较。也会经常被人问及到诸如此类的问题MongoDB4.0已经问世了,而且支持事务了,是不是将来可以取代MySQL了。MySQL和MongoDB哪个数据库好用啊。今天老张想通过这篇文章,带着大家全方位解读MySQL与MongoDB的区别。让有困惑的老铁们明白,没有谁替代谁,只有哪个场景更适合谁。 我们从下面四个方向依次阐明两者的区别。只有更了解彼此,让能更好地利用它们的功能性。 第一部分:数据库概述 我们先来了解一下MySQL这个数据库;

二、锁的分类及特性

限于喜欢 提交于 2019-11-25 20:48:31
【转】锁的分类及特性 数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问时变得有序所设计的一种规则。 对于任何一种数据库来说都需要有相应的锁定机制,所以 MySQL 自然也不能例外。 MySQL 数据库由于其自身架构的特点,存在多种数据存储引擎,每种存储引擎所针对的应用场景特点都不太一样。 为了满足各自特定应用场景的需求,每种存储引擎的锁定机制都是为各自所面对的特定场景而优化设计,所以各存储引擎的锁定机制也有较大区别。 MySQL 各存储引擎使用了三种类型(级别)的锁定机制: 表级锁定 行级锁定 页级锁定 表级锁定(table-level) 表级别的锁定是 MySQL 各存储引擎中最大颗粒度的锁定机制。该锁定机制最大的特点是实现逻辑非常简单,带来的系统负面影响最小。 所以获取锁和释放锁的速度很快。由于表级锁定一次会将整个表锁定,所以可以很好的避免困扰我们的死锁问题。 当然,锁定颗粒度大所带来最大的负面影响就是出现锁定资源争用的概率也会最高,致使并大度大打折扣。 使用表级锁定的主要是 MyISAM,MEMORY,CSV 等一些非事务性存储引擎。   行级锁定(row-level) 行级锁定最大的特点就是锁定对象的颗粒度很小,也是目前各大数据库管理软件所实现的锁定颗粒度最小的。 由于锁定颗粒度很小,所以发生锁定资源争用的概率也最小