关于MySQL数据库事务的机制学习总结
- 原子性(atomicity):原子性是说事务的不可分割,要么全成功,要么全失败,不可部分成功,部分失败。半途失败的情况下,需要打扫战场,也就是数据回滚。
- 一致性(consistency):一致性是说事务的最后结果,要保证数据上没有异常。一致性是强调结果,是建立在原子性上实现的,也就是说能保证原子性,那就会有一致性的结果。
- 隔离性(isolation):隔离性是说事务没有提交前对其他事务是不可见的,事务间数据是隔离的(当然不同级别隔离程度不一样)。
- 持久性(durability): 事务提交后会持久化,可以长久保存。
- 脏读:就是读到了别人还没提交的数据。
- 可重复读:就是同一个事物内的两次查询,中间如果别人修改了查询内的记录且提交了,对第二次查询是不可见的,不会出现同条记录两次查询不一致问题。
- 幻读:就是一个事物内的两次查询,中间如果别人增加了记录并且提交了,第二次查询能查询到的,会出现和第一次记录不一致的现象。
- 读未提交:这种级别是最低的,A事务的修改没有提交对B事物是可见的,会出现数据的脏读,一般情况下不会用到此种类型。
- 读已提交:A事物的修改提交后才对B可见,这种情况会出现数据的幻读的问题,两次查询的结果不一样。
- 可重复读:是MySQL默认的级别,这种级别事物内的两次查询,中间其他修改了某条记录,对其他事务是不可见的,保证了重复查的情况下同条记录的一致性,但是对于新增的情况其他事务是可见的,所以还是会出现新增幻读的现象。
- 可串行化:事务之间是串行执行的,对查询到的每条记录都加锁,会出现阻塞的情况,并发情况下会造成严重的性能问题,所以一般也不会用到这种类型。
- 查询时:查询当前事务之前存在的记录和本事务创建的记录,且没有被删除的,即:创建版本号<=当前版本号 && (删除版本号为空 || 删除版本号 > 当前版本号)
- 插入时:记录的创建版本号为当前事务版本号。
- 删除时:更新记录的删除版本号为当前事务版本号。
- 更新时:插入一条新记录,创建版本号为当前事务版本号,同时把原记录删除版本号改为当前事务版本号,代表已经删除。实际上这里的更新相当于删除再加一条记录。
- 悲观锁可以在数据库层面很简单的解决,利用select ... for update,在查询的时候就锁定这部分数据。
- 乐观锁的实现较悲观锁复杂,可以在数据库在一个版本号的列,更新的时候版本号都+1,以此来确认我查出来的数据后面有没有别人修改,已修改的不更新或程序抛一个异常。
关于MySQL数据库事务的机制学习总结的更多相关文章
- MySQL数据库事务剖析
MySQL数据库事务剖析 事务就是一组原子性的SQL查询,是一个独立的执行单元.事务内的语句,要么全部执行成功,要么全部执行失败. 1.事务的标准特征 一个运行良好的事务处理系统,必须具备原子性.一致 ...
- Mysql数据库事务隔离级别
事务(transaction)是数据库管理系统的执行单位,可以是一个数据库操作(如Select操作)或者是一组操作序列.事务ACID属性,即原子性(Atomicity).一致性(Consistency ...
- mysql数据库事务详细剖析
在写之前交代一下背景吧! 做开发也好久了,没怎么整理过知识,现在剖析一下自己对数据库事务的认识,以前用sqlserver,现在转java后又用mysql.oracle.我这块就主要解释一下mysql数 ...
- MySql数据库事务正常提交,回滚失败
问题:在初次练习Mysql数据库事务时,事务正常提交,但是在遇到异常应当回滚时,回滚失败. 代码如下: //2.更新操作. public void update(Connection conn, St ...
- Mysql数据库事务的隔离级别和锁的实现原理分析
Mysql数据库事务的隔离级别和锁的实现原理分析 找到大神了:http://blog.csdn.net/tangkund3218/article/details/51753243 InnoDB使用MV ...
- mysql数据库锁的机制-及事务事件
事务隔离级别,脏读.不可重复读.幻读,乐观锁.悲观锁(共享锁.排它锁) 数据库事务具有四个特征,分别是原子性(Atomicity).一致性(Consistency).隔离性(Isoation).持久性 ...
- MySQL数据库事务各隔离级别加锁情况--read uncommitted篇(转)
本文转自https://m.imooc.com/article/details?article_id=17291,感谢作者 1.目的 1.1 合适人群 1.数据库事务特征我只是背过,并没有很深刻的理解 ...
- mysql数据库事务隔离原理
今天在学习JDBC的时候看到了关于MySQL的事务的隔离级别的问题,感觉内容挺高级的,所以记录一篇文章,以备后面使用. 数据库隔离级别有四种,应用<高性能mysql>一书中的说明: 然后说 ...
- MySQL 数据库事务与复制
好久没有写技术文章了,因为一直在思考 「后端分布式」这个系列到底怎么写才合适. 最近基本想清楚了,「后端分布式」包括「分布式存储」和 「分布式计算」两大类. 结合实际工作中碰到的问题,以寻找答案的方式 ...
随机推荐
- 苹果又要召回iPhone 7!这到底是要闹哪样?
7!这到底是要闹哪样?" title="苹果又要召回iPhone 7!这到底是要闹哪样?"> 现在的苹果虽然刚刚收获了史上最赚钱的一个季度--营收和利润均创下史上最 ...
- 复合文字(Compound Literals)
复合文字(Compound Literals) 阅读代码时发现了这行 1 setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&(int){1},sizeof(in ...
- figure设置坐标轴
import matplotlib.pyplot as plt import numpy as np x=np.linspace(-3,3,50) y1=x*2+1 y2=x**2 plt.plot( ...
- 基于webhook方案的Git自动部署方案
之前已经用Git实现了自己博客的提交自动部署,并自动提交到GitHub和coding以备不时之需.平时项目代码都托管在Coding或者GitHub上,也已经用上了coding提供的webhook功能, ...
- Sed 实记 · laoless's Blog
sed编辑命令 p 打印匹配行 = 打印文件行号 a 在定位行之后追加文本 i 在定位行之前插入文本 d 删除定位行 c 用新文本替换定位文本 s 使用替换模式替换相应模式 r 从另一个文件读取文本 ...
- 在GitHub上分享自己的项目
GitHub主要是用作基于Git的分布式版本管理系统的库,可以保存和管理自己的代码,而且主要用作代码的合作开发. 注册GitHub后你就会有0.3G的免费空间,不过只能创建公开项目,这也满足代码分享的 ...
- Unity中使用C#的null条件运算符?.的注意事项
Introduction: 在C#6及以上版本中,加入了一项特别好用的运算符:Null条件运算符?.和?[]可以用来方便的执行判空操作,当运算符左侧操作数不为null时才会进行访问操作,否则直接返回n ...
- 初识Flask框架
Flask简介: Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架. Flask 本身相当于一个内核,其 ...
- 完整版EXCEL导出 (大框架SpringCloud 业务还是Springboot一套)
这里用的是easypoi 首先引入jar包 <!-- excel --><dependency> <groupId>cn.afterturn</groupId ...
- 记一次苹果APP从账号续费到发布成功的历程
一.一波三折的续费 最近公司开发的苹果APP的SSL证书到期了,计划重新发布一下该APP,已替换即将到期的SSL证书.近几年随着钉钉.企业微信等在线办公软件超级平台的出现,各企业都会选择其中 ...