事务的隔离级别和锁的实现方式
当数据库中多个事务(Transaction)处理同一数据时,就会出现并发的问题,也就是需要解决数据库隔离性的问题(isolation)。
数据库的事务操作主要会碰到以下几类问题:
1.脏读:脏读指的是当前事务读到了其他事务未提交(uncommitted)的数据;
2.不可重复读:本处的不可重复指的是在同一事务中,本事务未修改数据的情况下,两次读取的数据不一致;
3.虚读:虚读类似于不可重复读,只不过读取的不是数据库中某一行数据,而是一类数据,因此其余事务即使只是插入新的数据,也会对本事务的读产生影响;
4.第一类更新丢失:第一类更新丢失值得是,某一事物回滚(rollback)导致其他事务提交的数据被覆盖;
5.第二类更新丢失:本质和不可更新读一样,出现于不知道其他事务更新操作的存在。
知道了,以上的几个问题,我们来看看数据库事务的隔离级别是如何解决这些问题的:
1.Read uncommitted 读未提交数据:能解决第一类丢失更新的问题,但不能解决脏读的问题
实现原理是,读数据时候不加锁,写数据时候加行级别的共享锁,提交时释放锁。行级别的共享锁,不会对读产生影响,但是可以防止两个同时的写操作。
2.Read committed 读提交数据:能解决脏读的问题,但是不能解决不可重复读的问题:
实现原理是,事务读取数据(读到数据的时候)加行级共享锁,读完释放;事务写数据时候(写操作发生的瞬间)加行级独占锁,事务结束释放。由于事务写操作加上独占锁,因此事务写操作时,读操作也不能进行,因此,不能读到事务的未提交数据,避免了脏读的问题。但是由于,读操作的锁加在读上面,而不是加在事务之上,所以,在同一事务的两次读操作之间可以插入其他事务的写操作,所以可能发生不可重复读的问题。
3.Repeated Read 可重复读:顾名思义,可以解决不可重复读的问题,但是不能解决虚读问题:
实现原理,和读提交数据不同的是,事务读取数据在读操作开始的瞬间就加上行级共享锁,而且在事务结束的时候才释放。分析方法和读提交数据类似,本处不再赘述。但是,由于加锁只是加在行上,所以,仍然可能发生虚读的问题。
4. Serializable 串行化:可以解决以上所有的并发问题:
实现原理是,在读操作时,加表级共享锁,事务结束时释放;写操作时候,加表级独占锁,事务结束时释放。
---------------------
版权声明:本文为CSDN博主「杨天宇的小木屋」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yangtianyu1218/article/details/51543634
事务的隔离级别和锁的实现方式相关推荐
- mysql transaction用法,mysql的事务,隔离级别和锁用法实例分析
本文实例讲述了mysql的事务,隔离级别和锁用法.分享给大家供大家参考,具体如下: 事务就是一组一起成功或一起失败的sql语句.事务还应该具备,原子性,一致性,隔离性和持久性. 一.事务的基本要素 ( ...
- 关于数据库事务、隔离级别、锁的理解与整理
下方查看历史精选文章 重磅发布 - 自动化框架基础指南pdf 大数据测试过程.策略及挑战 测试框架原理,构建成功的基石 在自动化测试工作之前,你应该知道的10条建议 在自动化测试中,重要的不是工具 事 ...
- 事务的隔离级别与锁的申请和释放
脏读(Dirty Read) 脏读意味着一个事务读取了另一个事务未提交的数据,而这个数据是有可能回滚 不可重复读(Unrepeatable Read) 不可重复读意味着,在数据库访问中,一个事 ...
- 数据库事务隔离级别和锁的实现方式
当数据库中多个事务(Transaction)处理同一数据时,就会出现并发的问题,也就是需要解决数据库隔离性的问题(isolation). 数据库的事务操作主要会碰到以下几类问题: 1.脏读:脏读指的是 ...
- MySQL事务原理分析(ACID特性、隔离级别、锁、MVCC、并发读异常、并发死锁以及如何避免死锁)
MySQL事务原理分析(ACID特性.隔离级别.锁.MVCC.并发读异常.并发死锁以及如何避免死锁) 一.事务 目的 组成 特征 事务空间语句 二.ACID特性 原子性(A) 隔离性(I) 持久性(d ...
- 事物的级别_浅谈MySQL并发控制:隔离级别、锁与MVCC
推荐阅读: 恕我直言!收藏这个MySQL文档,你其余的MySQL学习资料都可以扔了 前言 如果数据库中的事务都是串行执行的,这种方式可以保障事务的执行不会出现异常和错误,但带来的问题是串行执行会带来性 ...
- mysql 乐观锁 脏读_mysql 丢失更新1和2、脏读、不可重复读和幻读 事务隔离级别 悲观锁 乐观锁...
事务是现代关系型数据库的核心之一.在多个事务并发操作数据库(多线程.网络并发等)的时候,如果没有有效的避免机制,就会出现以下几种问题: ( 第一类丢失更新 A事务撤销时,把已经提交的B事务的更新数据覆 ...
- MySQL深度剖析之事务隔离级别和锁机制(2021)
一 事务隔离级别和锁机制 1.1 多个事务并发修改同一条数据或者对同一条数据并发读写存在哪些事务并发问题 1.1.1 脏读(未提交读) A事务读取了别的事务还未提交的更新,而B事务是有可能回滚的. 1 ...
- mysql的事务隔离级别与锁的关系、sql日志、Spring事务的特性
文章目录 数据库事务介绍 什么是事务的隔离级别? 脏读幻读不可重复读的示例? mysql默认的隔离级别 Mysql锁有哪些 for update 什么是间隙锁?(Next-Key) mysql的日志 ...
- mysql数据 锁 隔离级别_MySQL数据库事务各隔离级别加锁情况--read uncommitted篇
1.目的 1.1 合适人群 1.数据库事务特征我只是背过,并没有很深刻的理解. 2.数据库事务的隔离级别只是了解,并没有深刻理解,也没有在实际工作中体验使用过. 3.经常面试被人问起数据库加锁情况,一 ...
最新文章
- 从Android访问PC端的port (reverse port forwarding)
- NULL、0、nullptr的区别?
- python查询文件软件_Python小工具--多文件查找字符串fs
- K8s-V1.17.6支持GPU
- 工作236:点击直接进入
- java中的foreach
- LOJ3119 CTS2019 随机立方体 概率、容斥、二项式反演
- 超市百货电商app移动端原型+通用模块全局规则说明+超市电商后台管理web端原型+超市电商产品原型及需求文档+业务后台(商品管理+广告管理+活动管理)
- 图像识别讲解 以一个简单的图像识别任务为例
- 从0开始学习C#第二天
- Rclone挂载SharePoint
- faster-RCNN tensorflow-gpu环境配置及安装出现的问题
- python, echarts 实现世界地图地域流向地图
- 帝国cms小程序端源码
- 【网络协议】转载:关于TCP与UDP的接收recv和recvfrom
- 湖南科技大学Android课程设计之个人理财小助手APP
- QQ音乐播放器部分笔记
- VS Code插件 使用 VS Code 连接 MySQL 数据库
- 测试质量体系搭建--测试团队架构
- 拖动鼠标实现翻页效果
热门文章
- STM32内部RAM在线调试配置方法及详细说明(基于Keil开发工具)
- 设置linux睡眠时间,Linux 睡眠时间函数如何使用?延迟指定时间sleep命令了解一下...
- 微秒, 纳秒,毫秒, 时间单位换算[转]
- Python爬虫之协程
- 网吧用计算机性能配件清单,如何查看网吧电脑配置清单图文教程
- InfluxDB使用HTTP的API编写数据
- 常用的神经网络控制结构,神经网络控制的特点
- qq的云消息服务器,20 万台 QQ 服务器全面上云
- 远程监控养猪监控系统
- 伦敦银短线交易_MOM指标