文档章节

细谈Mysql事务

程序猿周先森
 程序猿周先森
发布于 10/23 17:16
字数 1295
阅读 192
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

文章原创于公众号:程序猿周先森。本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号。

file

上一篇着重谈到了MySQL锁的概念,里面谈到了事务的概念,其实大部分开发者对于事务肯定不陌生,事务的概念其实就是一组SQL语句组成一个执行单元,如果单元中的某个SQL语句执行出现异常,则需要将整个事务进行回滚到未修改的状态。只有单元中全部SQL语句都成功执行,才会提交数据代表事务执行成功。而Mysql其实前几篇我们都已经知道是支持多种存储引擎的,其实正是因为MyISAM引擎不支持事务被InnoDB取代的原因。所以本篇文章主要是针对InnoDB引擎详细了解下事务这个概念。

事务特性

  • 原子性: 事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。

  • 一致性:事务中包含的处理要满足数据库提前设置的约束,如主键约束或者NOT NULL 约束等。

  • 隔离性:事务处理过程中的中间状态对外部是不可见的。

  • 持久性:事务完成之后,它对于数据的修改是永久性的。

隔离性的四种隔离级别

InnoDB引擎支持的4种事务隔离级别分别是:读未提交、读已提交、可重复读、串行读。

  • 读未提交:允许脏读,可以读取其他session中未提交的脏数据。

  • 读已提交:不可读取其他session尚未提交的数据,只有其他session数据已提交才能读取到,为不重复读。

  • 可重复读:该级别下可重复读,InnoDB引擎默认采用可重复读,不允许读取还未提交的脏数据,但是可能存在InnoDB独有的幻读。

  • 串行读:该级别下隔离程度最高,事务只能一个接着一个串行执行,无法并发执行。每次串行读都需要获得表级共享锁,读写操作都会阻塞。

幻读

事务在插入一条已经经过检查不存在的记录,但是插入结果是数据已经存在,之前的检查操作如同幻影。Mysql默认采用可重复读级别,所以只可能出现幻读的情况。

设置事务隔离级别

可以在my.ini文件中[mysqld]下配置transaction-isolation属性,隔离性的四个值为:READ-UNCOMMITTED、READ-COMMITIED、REPEATABLE-READ、SERIALIZABLE,分别对应读未提交、读已提交、可重复读、串行读四种隔离级别。

事务分类

事务一般分为两种:隐式事务和显示事务。在Mysql中,事务默认是自动提交的,所以说每个DML语句实际上就是一次事务的过程。 隐式事务:没有开启和结束的标志,默认执行完SQL语句就自动提交,比如我们经常使用的INSERT、UPDATE、DELETE语句就属于隐式事务。 显示事务:需要显示的开启关闭,然后执行一系列操作,最后如果全部操作都成功执行,则提交事务释放连接,如果操作有异常,则回滚事务中的所有操作。

事务使用步骤 开启事务:关闭自动提交,然后开启事务。 事务操作:一系列DML语句执行。 事务结束:根据事务操作成功与否选择提交事务或者回滚事务操作。

接下来我们简单的使用事务实现用户A向用户B转账的操作:

创建用户表并插入两条用户数据:

file

配置数据库连接信息:

file

接下来从连接池中取出一个数据库连接并进行数据库连接:

file

数据库连接成功,则使用connection对象开启事务: file

然后查询转账账号与待转账账号是否存在,并进行转账等一系列操作,这里由于魔鬼回调的原因我这里使用async库变成链式调用:

file

最后根据事务操作的成功或失败进行事务提交或者事务回滚,并且释放数据库连接:

file

然后可以测试转账成功的情况可以发现转账操作成功了

file

再次测试转账失败的操作可以发现扣除A积分和增加B积分的操作全部被回滚了,所以A和B的积分余额都没有发生改变

file 欢迎关注公众号:程序猿周先森。文章原创于微信公众号,本平台不定时更新。

© 著作权归作者所有

程序猿周先森
粉丝 0
博文 39
码字总数 82935
作品 0
厦门
私信 提问
Java程序员从笨鸟到菜鸟全部博客目录【2012年十一月七日更新】

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 大学上了一年半,接触java也一年半了,虽然中间也有其他东西的学习,但是还是以java为主路线,想想这一年半,...

长平狐
2012/11/12
145
0
Java程序员从笨鸟到菜鸟全部博客目录【2012年十一月七日更新】

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 大学上了一年半,接触java也一年半了,虽然中间也有其他东西的学习,但是还是以java为主路线,想想这一年半,...

长平狐
2012/11/12
237
0
《Java程序员由笨鸟到菜鸟》电子版书正式发布,欢迎大家下载

在众多朋友的支持和鼓励下,《Java程序员由菜鸟到笨鸟》电子版终于和大家见面了。本电子书涵盖了从java基础到javaweb开放框架的大部分内容。在编写的过程中,难免会出现一些错误,希望大家能...

长平狐
2012/11/12
288
0
《Java程序员由笨鸟到菜鸟》电子版书正式发布,欢迎大家下载

在众多朋友的支持和鼓励下,《Java程序员由菜鸟到笨鸟》电子版终于和大家见面了。本电子书涵盖了从java基础到javaweb开放框架的大部分内容。在编写的过程中,难免会出现一些错误,希望大家能...

长平狐
2012/11/12
169
0
Java程序员从笨鸟到菜鸟之(五十六)细谈Hibernate(七)Hibernate自身一对多和多对多关系映射

欢迎阅读本专题其他博客: 细谈Hibernate(十)hibernate查询排序和组件映射 细谈Hibernate(十一)hibernate复合主键映射 细谈Hibernate(十二)hibernate查询排序组件映射 细谈Hibernate(...

长平狐
2012/11/12
275
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql免安装

参考:http://blog.csdn.net/qq_28569585/article/details/79072805 [mysqld]#设置mysql密码为空#skip-grant-tables#设置3306端口 port = 3306# 设置mysql的安装目录 basedir=E...

秋默
7分钟前
2
0
立足于SpringCloud.H + Netflix-Ribbon + Hystrix断路器(9)

《SpringCloud.H心法总纲》 继续上一篇,接下来Springcloud配置Netflix-Ribbon集成Hystrix断路器的功能。 1、添加依赖 <!--使用hystrix,测试断路器--><dependency> <groupId>org.spr......

木九天
8分钟前
2
0
Dropbox怎么共享文件?Dropbox共享文件操作

Dropbox网盘是国外的一项云存储服务,这意味着即使您使用的是其他设备,您也可以将文件复制到云中并在以后访问它们,目前支持PC、Android和MAC三大平台,为用户带来最精准的资源传输工作。就...

坚果云
10分钟前
5
0
Vant Weapp 1.0 正式版发布

1.0 来了 2018 年 8 月 11 日,我们发布了 Vant Weapp 的首个版本。16 个月以来,我们收到了 27 位开发者贡献的 1000 多次提交,也处理了 1200 多个 issue,发布了 50 多个版本。Github 的 ...

有赞coder
12分钟前
3
0
VCF文件格式详解

VCF文件全称为Variant Call Format,表示基因组的变异信息,通常为GATK和Samtools软件处理所得到。 VCF文件大致可以分为两个部分: 1、以##开头的头文件信息 ##fileformat=VCFv4.2##FILTER...

悲催的古灵武士
13分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部