开发者社区> markfork> 正文

数据库事务特征、数据库隔离级别,各级别数据库加锁情况(含实操)--Repeatable Read && MVCC

简介: 上节回顾 上两篇记录了我对MySQL 事务 隔离级别** read uncommitted **、MySQL 事务隔离级别 read committed+MVCC 的理解。
+关注继续查看

上节回顾


上两篇记录了我对MySQL 事务 隔离级别** read uncommitted **、MySQL 事务隔离级别 read committed+MVCC 的理解。
这篇记录我对 Repeatable Read 的理解。

前言


MySQL在 read committed、**Repeatable Read ** 两个级别下都会使用到MVCC, 并且只在这两个级别下使用。

目录


1.单纯加锁是怎么实现 Repeatable Read 的?
2.真实的情况是什么样子的?

1.单纯加锁是怎么实现 Repeatable Read 的


1.多线程同时更新同一条记录,加X锁。所以并发场景下的 update 是串行执行的。
2.工业定义上的 select 一条记录,这个时候会在记录上加读共享锁(S锁),并到事务结束,因为在这种情况下才能实现记录在事务时间跨度上的可重复读。在读的时候不允许其他事务修改这条记录。
3.update 一条语句,这个时候会在记录上加行级排他锁(X锁),并到事务结束,这中场景下,其他读事务会被阻塞。

2.真实的情况是什么样子的?


读不影响写,写不影响读。

1.读不影响写:事务以排他锁的形式修改原始数据,读时不加锁,因为 MySQL 在事务隔离级别Read committed 、Repeatable Read下,InnoDB 存储引擎采用非锁定性一致读--即读取不占用和等待表上的锁。即采用的是MVCC中一致性非锁定读模式。因读时不加锁,所以不会阻塞其他事物在相同记录上加 X锁来更改这行记录。
2.写不影响读:事务以排他锁的形式修改原始数据,当读取的行正在执行 delete 或者 update 操作,这时读取操作不会因此去等待行上锁的释放。相反地,InnoDB 存储引擎会去读取行的一个快照数据。

博客搬家:大坤的个人博客
欢迎评论哦~

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
MySQL 事务处理 简单介绍事务处理: MySQL 事务主要用于处理操作量大,复杂度高的数据。 比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务! 一个事务是一个连续的一组数据库操作,就好像它是一个单一的工作单元进行。
1212 0
Spring Cloud中Hystrix 线程隔离导致ThreadLocal数据丢失(续)
Spring Cloud中Hystrix 线程隔离导致ThreadLocal数据丢失(续)
87 0
数据库事务ACID
数据库事务 数据库事务有严格的定义,它必须同时满足4个特性:原子性(Atomic)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),简称ACID。
890 0
PostgreSQL 数据库实例只读锁定(readonly) - 硬锁定,软锁定,解锁
PostgreSQL 数据库实例只读锁定(readonly) - 硬锁定,软锁定,解锁
719 0
C#使用SqlBulkCopy将DataTable写入数据库的表中(表不存在则创建新表,数据存在则更新,不存在则插入)
原文:.net使用SqlBulkCopy导入数据(创建新表) .net2.0后ado.net提供了一个快速导入sqlserver的方法sqlbulkcopy.导入效率非常高.  包装了一个简单的sqlbulkcopy类,用于数据从datatable导入到sqlserver.
2572 0
技术原理:MySQL数据库事务浅析
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaobryant/article/details/80539558 在SQL编程中,事务编程已然成为必不可少的一个组成部分。
2313 0
SpringBoot2 整合JTA组件,多数据源事务管理
JTA即Java-Transaction-API,JTA允许应用程序执行分布式事务处理,即在两个或多个网络计算机资源上访问并且更新数据。JDBC驱动程序对JTA的支持极大地增强了数据访问能力。
544 0
+关注
markfork
简介:个人专注后端开发、在MySQL数据库、Java并发编程、有比较深入的学习,平时喜欢研究一些中间件的相关理论及实操、如Redis、Nginx。 愿景:打造个人知识ip 个人博客:markfork.com 个人简书:https://www.jianshu.com/u/c1
80
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载