mysql事务

Spring事务控制

我怕爱的太早我们不能终老 提交于 2020-01-24 21:12:14
事务控制 spring中基于XML的声明式 配置事务管理器 配置事务的通知 tx:method isolation:用于指定事务的隔离级别,默认为DEFAULT,表示使用数据库的默认隔离级别。 propagation:用于指定事务的传播行为,默认值为REQUIRED,表示是一定会有事务,增删改查的选择。查询方法可以选择SUPPORTS read-only:用于指定事务是否只读,只有查询方法才能设置为true。默认值为false,表示读写 rollback-for:用于指定一个异常,当发生该异常时,事务回滚,产生其他异常时事务不回滚。没有默认值,表示任何异常都回滚 no-rollback-for:用于指定一个异常,事务不回滚,产生其他异常时事务回滚,没有默认值,表示任何异常都回滚 timeout:用于指定事务的超时时间,默认值为-1,表示永不超时。如果指定了该值,以秒为单位。 使用tx:advice标签配置事务通知 id:唯一标识 transaction-manager:事务管理器引用 配置aop通用切入点表达式 建立事务通知和切入点表达式的对应关系 示例 <!--配置连接池--> < bean id = " dataSource " class = " org.springframework.jdbc.datasource.DriverManagerDataSource " > <

mysql性能优化

旧街凉风 提交于 2020-01-24 13:46:15
数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情 1.为查询缓存优化你的查询 mysql> show variables like '%query_cache%'; (query_cache_type 为 ON 表示已经开启) +------------------------------+----------+ | Variable_name | Value | +------------------------------+----------+ | have_query_cache | YES | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 20971520 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | +------------------------------+----------+ 如果不是ON,修改配置文件以开启查询缓存: > vi /etc/my.cnf [mysqld]中添加: query_cache_size = 20M #缓存的大小

mysql的ACID的理解

 ̄綄美尐妖づ 提交于 2020-01-24 10:16:05
这是在网上copy下来的ACID的概念,可以直接跳过看后面: 1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。 2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。 3、隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。 4、持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。 其中,原子性和持久性的概念比较好理解。但是最近发现老是把一致性和隔离性混淆。 个人理解,隔离性主要是针对读操作的。在不同事务之间,读操作隔离。比如另一个事务对数据修改后,会不会影响当前事务的读操作,要不要读到更新后的数据。 一致性,主要强调的是数据的更新是不是“正确”,即,是不是符合我们的预期,这个和读操作应该是要分开看待的,这里应该只强调写操作。 造成我对这俩个概念的混淆的原因是,在java的并发编程中,我们关注的似乎只有一致性

数据库学习之MySQL (四)——DQL DDL DML DCL 事务 到底是什么

会有一股神秘感。 提交于 2020-01-23 19:30:56
MySQL学习专栏 正在持续更新中:) 文章目录 DQL 数据查询语言 DDL 数据模式定义语言 DML 数据操作语言 DCL 数据控制语言 事务 Transaction MySQL语句众多,但有章可循,分类有助于学习 DQL 数据查询语言 DQL (data query language) query就是查询,类似question,query和JQery很像,也可以帮助记忆。 数据库语言中,查询是重点,很多优化算法和数据结构设计都是为了查询。 这里来做个实验: 我想查询大家的 工资 需要拿到一个表 名字-工资 的形式 该怎么办? 确定数据库(data1) 总表在哪(employees) 需要的栏目是什么(名字,工资) 这里就要用到 select语句 。 USE data1; SELECT `first_name`, `last_name`, `salary` FROM employees; 明显 SELECT的是“栏目” FROM的是表格名称。 对表结构还不理解,或者,没有data1库,可以看我的上一个教程: 数据库学习之MySQL (三)——简单操作数据库 小试牛刀 然后data1数据库: data1.sql 数据库文件 配合阮菜鸡的MySQL教程使用 Q1 为啥每个栏目名字都加` 符号呢? A1 设想,有个栏目叫show 系统会怎么识别? 所以这个符号是为了

清晰架构(Clean Architecture)的Go微服务: 事物管理

我只是一个虾纸丫 提交于 2020-01-23 16:47:33
为了支持业务层中的事务,我试图在Go中查找类似Spring的声明式事务管理,但是没找到,所以我决定自己写一个。 事务很容易在Go中实现,但很难做到正确地实现。 需求: 石头文学网 https://www.10tou.com 将业务逻辑与事务代码分开。 在编写业务用例时,开发者应该只需考虑业务逻辑,不需要同时考虑怎样给业务逻辑加事务管理。如果以后需要添加事务支持,你可以在现有业务逻辑的基础上进行简单封装,而无需更改任何其他代码。事务实现细节应该对业务逻辑透明。 事务逻辑应该作用于用例层(业务逻辑) 不在持久层上。 数据服务(数据持久性)层应对事务逻辑透明。 这意味着持久性代码应该是相同的,无论它是否支持事务 你可以选择延迟支持事物。 你可以先编写没有事务的用例,稍后可以在不修改现有代码的情况下给该用例加上事务。你只需添加新代码。 我最终的解决方案还不是声明式事务管理,但它非常接近。创建一个真正的声明式事务管理需要付出很多努力,因此我构建了一个可以实现声明式事务的大多数功能的事务管理,同时又没花很多精力。 方案: 最终解决方案涉及本程序的所有层级,我将逐一解释它们。 数据库链接封装 在Go的“sql”lib中,有两个数据库链接sql.DB和sql.Tx. 不需要事务时,使用sql.DB访问数据库; 当需要事务时,你使用sql.Tx. 为了共享代码,持久层需要同时支持两者。

Fescar原理

纵然是瞬间 提交于 2020-01-23 15:53:27
Fescar原理 1、概述 fescar刚推出不久,没几天。看了github的Issues,有人问:可以直接商用吗? 作者的回复: image 我们也看一下fescard的历史: 阿里是国内最早一批进行应用分布式(微服务化)改造的企业,所以很早就遇到微服务架构下的分布式事务问题。 2014 年,阿里中间件团队发布 TXC(Taobao Transaction Constructor),为集团内应用提供分布式事务服务。 2016 年,TXC 经过产品化改造,以 GTS(Global Transaction Service) 的身份登陆阿里云,成为当时业界唯一一款云上分布式事务产品,在阿云里的公有云、专有云解决方案中,开始服务于众多外部客户。 2019 年起,基于 TXC 和 GTS 的技术积累,阿里中间件团队发起了开源项目 Fescar(Fast & EaSy Commit And Rollback, FESCAR),和社区一起建设这个分布式事务解决方案。 TXC/GTS/Fescar 一脉相承,为解决微服务架构下的分布式事务问题交出了一份与众不同的答卷。 阿里出品的中间件有一种精神是值得赞扬的,就是出品的任何中间件都是业务中已经使用多年的产品。都是经过锤炼的产品,开源的话,去除和内部业务耦合的代码,开源出来。至少有一点,底层的代码是经历过双11这种高并发请求量打磨过的代码

Jpa学习(一)

吃可爱长大的小学妹 提交于 2020-01-23 09:40:22
JPA学习总结 JPA简介 JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 JPA包含的技术 ORM映射元数据 JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中; API 用来操作实体对象,执行CRUD操作,框架在后台替代我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。 查询语言 这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。 引入相关jar包 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0<

python后端面试第三部分:数据储存与缓存相关--长期维护

感情迁移 提交于 2020-01-22 15:34:57
################## 数据储存与缓存相关 ####################### mysql数据库, redis数据库, 9. MySQL的索引一般是怎么实现的? B-Tree(一般是B+Tree)和Hash,然后再简单介绍一下。 存储 存储可能包含rdbms,nosql以及缓存等,我以MySQL,redis举例。 mysql相关 mysql 是流行的RDBMS 关系型数据库 1.谈谈mysql字符集和排序规则? 2.var char与char的区别是什么?大小限制?utf8字符集下varchar最多能存多少个字符 char的长度是不可变的,而varchar的长度是可变的,也就是说,定义一个char[10]和varchar[10],如果存进去的是‘csdn’,那么char所占的长度依然为10, 除了字符‘csdn’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的。 尽管如此,char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。 再者,char的存储方式是,对英文字符

My SQL 学习打卡 60天搞定mysql

最后都变了- 提交于 2020-01-22 15:34:03
Day01--查询语句执行流程   mysql 基础架构:        MySQL 5.5.5 版本开始InnoDB成为了默认存储引擎   连接器:   链接器超时断开参数 wait_timeout 默认 8小时   缓存   mysql 缓存提供按需使用的方式 将参数 query_cache_type 设置成 DEMAND,这样对于默认的 SQL 语句都不使用查询缓存。而对于你确定要使用查询缓存的语句,可以用 SQL_CACHE 显式指定   MySQL 8.0 版本直接将查询缓存的整块功能删掉了 mysql> select SQL_CACHE * from T where ID=10;   分析器:   分析器先会做“词法分析”。再做“语法分析”    优化器:   优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。   执行器:   首先判读用户对表有没有查询权限。如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。   数据库的慢查询日志中看到一个 rows_examined 的字段,表示这个语句执行过程中扫描了多少行。这个值就是在执行器每次调用引擎获取数据行的时候累加的 Day02--更新语句执行流程   更新比查询多涉及两个日志模块 redo log 和

清晰架构(Clean Architecture)的Go微服务: 事物管理

亡梦爱人 提交于 2020-01-22 10:29:21
为了支持业务层中的事务,我试图在Go中查找类似Spring的声明式事务管理,但是没找到,所以我决定自己写一个。 事务很容易在Go中实现,但很难做到正确地实现。 需求: 将业务逻辑与事务代码分开。 在编写业务用例时,开发者应该只需考虑业务逻辑,不需要同时考虑怎样给业务逻辑加事务管理。如果以后需要添加事务支持,你可以在现有业务逻辑的基础上进行简单封装,而无需更改任何其他代码。事务实现细节应该对业务逻辑透明。 事务逻辑应该作用于用例层(业务逻辑) 不在持久层上。 数据服务(数据持久性)层应对事务逻辑透明。 这意味着持久性代码应该是相同的,无论它是否支持事务 你可以选择延迟支持事物。 你可以先编写没有事务的用例,稍后可以在不修改现有代码的情况下给该用例加上事务。你只需添加新代码。 我最终的解决方案还不是声明式事务管理,但它非常接近。创建一个真正的声明式事务管理需要付出很多努力,因此我构建了一个可以实现声明式事务的大多数功能的事务管理,同时又没花很多精力。 方案: 最终解决方案涉及本程序的所有层级,我将逐一解释它们。 数据库链接封装 在Go的“sql”lib中,有两个数据库链接sql.DB和sql.Tx. 不需要事务时,使用sql.DB访问数据库; 当需要事务时,你使用sql.Tx. 为了共享代码,持久层需要同时支持两者。 因此需要对数据库链接进行封装,然后把它作为数据库访问方法的接收器。