关于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 数据库事务与复制
好久没有写技术文章了,因为一直在思考 「后端分布式」这个系列到底怎么写才合适. 最近基本想清楚了,「后端分布式」包括「分布式存储」和 「分布式计算」两大类. 结合实际工作中碰到的问题,以寻找答案的方式 ...
随机推荐
- Python 模块之间的引用
项目结构: Dog.Cat模块引用Animal模块 Animal模块代码: # -*- coding:UTF-8 -*- # 定义一个动物类 class Animal(object): def run ...
- 如何在sublime中调试html文件
一.安装View In Browser插件 快捷键 Ctrl+Shift+P(菜单栏Tools->Command Paletter),输入 pcip选中Install Package并回车,输入 ...
- 测试用例设计经典面试题之电梯、杯子、笔、桌子、洗衣机、椅子、ATM等
测试用例设计经典面试题之电梯.杯子.笔.桌子.洗衣机.椅子.ATM等 1.测试项目:电梯 需求测试:查看电梯使用说明书.安全说明书等 界面测试:查看电梯外观 功能测试:测试电梯能否实现正常的上升和下降 ...
- 如何在实际项目中使用PageHelper分页插件
PageHelper是一个分页插件,能够简单快速的帮助开发人员完成常见的分页功能,你只需要简单的使用两行代码就可以完成一个分页效果- 最近做一个科创项目,使用Maven+SSM的环境,有分页的功能,于 ...
- iOS多线程开发之GCD(死锁篇)
上篇和中篇讲解了什么是GCD,如何使用GCD,这篇文章将讲解使用GCD中将遇到的死锁问题.有兴趣的朋友可以回顾<iOS多线程开发之GCD(上篇)>和<iOS多线程开发之GCD(中篇) ...
- OpenStack官方镜像无法ssh登陆
0x00 序 当前主流的Linux系统都有提供可以在OpenStack中直接使用cloud镜像,但当使用从官方网站下载的镜像创建云主机时,你会发现Linux下经常使用的ssh竟然无法登陆新创建好的云主 ...
- VMWare vCenter 4.x 数据库由SQL Express 迁移至SQL Server 2008 R2
默认安装下的 VMware vCenter 4.x 会在本地安装 SQL Express 2005 版本,如果你有需要迁移至 Full SQL Server版本比如 SQL Server 2008 R ...
- Docker实战之MySQL主从复制
前言 曾几何时,看着高大上的架构和各位前辈高超的炫技,有没有怦然心动,也想一窥究竟?每当面试的时候,拿着单应用的架构,吹着分库分表的牛X,有没有心里慌的一批? 其实很多时候,我们所缺少的只是对高大上的 ...
- Wordpress 外网访问时不显示图片解决办法
我的云服务器是 :windows2012R 打开命令行: 进入到mysql中 show databases; //查看你Wordpress使用的数据库是否存在 use blog; //例如你使用的数据 ...
- Mariadb 修改root密码及跳过授权方式启动数据库
默认情况下,yum方式新安装的 mariadb 的密码为空,在shell终端直接输入 mysql 就能登陆数据库. 如果是刚安装第一次使用,请使用 mysql_secure_installation ...