![[MySQL] MVCC 多版本并发控制实现的事务,第1张 [MySQL] MVCC 多版本并发控制实现的事务,第1张](/aiimages/%5BMySQL%5D+MVCC+%E5%A4%9A%E7%89%88%E6%9C%AC%E5%B9%B6%E5%8F%91%E6%8E%A7%E5%88%B6%E5%AE%9E%E7%8E%B0%E7%9A%84%E4%BA%8B%E5%8A%A1.png)
1.没有一个统一的实现标准,实现了非阻塞的读 *** 作,写 *** 作也只锁定必要的行
2.通过保存数据在某个时间点的快照实现的
3.典型的有乐观并发控制和悲观并发控制
4.innodb的mvcc是每次事务都有递增的版本号,通过在每行记录的后面添加两列隐藏字段,两列分别是是创建版本号和删除版本号,存储 *** 作它事务的版本号
5.在事务中增删改查就是对两列版本号字段进行 *** 作
insert 为新插入的每一行保存当前事务版本号到 行创建版本号字段
update 插入一行新的保存当前事务创建版本号,修改原行数据的删除版本号为本次事务的版本号
delete 修改行的删除版本号字段为本次事务的版本号
select 查询 创建版本号字段 小于等于当前事务版本的数据 确保该记录是本次之前就存在的或本次事务新插的
查询 删除版本号字段 不存在或者大于当前版本的数据 确保该记录在本次事务之前没删除
6.这样的设计就不需要加锁了,读和 *** 作性能好,但是需要额外的存储空间
7.mvcc只在REPEAtable READ和READ COMMITED两个隔离下工作;READ UNCOMMITED总是读取最新数据;SERIAliZABLE对读取的行都加锁
以上是内存溢出为你收集整理的[MySQL] MVCC 多版本并发控制实现的事务全部内容,希望文章能够帮你解决[MySQL] MVCC 多版本并发控制实现的事务所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)