栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MySQL事务

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL事务

MySQL学习总结系列

1.MySQL概览

2.MySQL索引

3.MySQL锁

4.MySQL事务

        事务由独立单元的一个或者多个sql语句组成,在这个单元中sql语句是相互依赖的,整个单元是不可分割的整体,要么全部执行成功,要么都失败回滚到事务初始状态。事务的特性ACID,原子性、隔离性、持久性和一致性。其中原子性依赖undolog、redolog实现;隔离性依赖锁实现;持久性依赖redolog、DoubleWrite实现;一致性依赖MVCC(innodb引擎)、锁;

        事务的隔离级别包括读未提交,读已提交,可重复读和串行化。

读未提交:读未提及存在脏读问题。脏读即当前事务读取了其他事务中未提交的数据。脏读对应的还有脏写,即当前事务中的数据被其他事务修改,这个属于基本的要求,每个事务隔离级别都不存在脏写问题。

读已提交:读已提交解决了脏读问题,但存在不可重复读问题,即在当前事务中读取到其他事务已提交的成果,导致两次读取的数据不一致。

可重复读:解决了不可重复读的问题,但存在幻读。幻读跟不可重复读类似,这里主要指的是数据新增,假设事务a在对一批数据进行修改,当事务提交后再查询发现有数据并没有修改(其他事务新增的记录)。

串行化:最高的事务隔离级别,能够解决上述所有问题,但对数据库性能影响较大,使用频率较低。

        MVCC(多版本并发控制):为了提高数据库的并发性能,更好的解决读写冲突(不加锁、非阻塞的方式并发读),innodb引擎采用mvcc。

        当前读和快照读:当前读是以加锁的方式读取数据,读取的是最新版本的数据(select ...for update );快照读是常规的select操作,未加锁操作。

        MVCC多版本并发控制的实现是通过数据行中的两个隐藏列(txid和rollbackpoint)结合readview实现的,两个隐藏列一个保存修改数据的事务编号,另一个指向回滚段中的原始记录。readview根据隔离级别在事务的不同阶段创建,它记录了当前事务运行过程中识别到的受其他事务的影响情况。

        MVCC仅在读已提交和可重复读这两个事务隔离级别下有效,读未提交读取的是最新数据,串行化会对所有记录加锁,与MVCC并不兼容。其中RC和RR模式下不同的点在readview的创建时间,RR模式下是事务一开始就创建readview,后续的所有操作都依赖同一个readview进行判断;RC模式下是在每次select动作之前创建readview,所以mvcc只有在RR模式下能解决幻读问题,

readview关键信息

create txid:当前事务的id

mintxid:readview创建时活动的最小事务id

maxtxid:readview创建时活动的最大事务id

mids:readview创建时活跃的id集合

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1007375.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号