当前位置: 首页 > news >正文

数据库隔离级别

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

我这4种隔离级别的相应原理总结如下:

READ_UNCOMMITED 的原理:

  • 事务对当前被读取的数据不加锁;
  • 事务在更新某数据的瞬间(就是发生更新的瞬间),必须先对其加 行级共享锁,直到事务结束才释放。

表现:

  • 事务1读取某行记录时,事务2也能对这行记录进行读取、更新;当事务2对该记录进行更新时,事务1再次读取该记录,能读到事务2对该记录的修改版本,即使该修改尚未被提交。
  • 事务1更新某行记录时,事务2不能对这行记录做更新,直到事务1结束。

READ_COMMITED 的原理:

  • 事务对当前被读取的数据加 行级共享锁(当读到时才加锁),一旦读完该行,立即释放该行级共享锁;
  • 事务在更新某数据的瞬间(就是发生更新的瞬间),必须先对其加 行级排他锁,直到事务结束才释放。

表现:

  • 事务1读取某行记录时,事务2也能对这行记录进行读取、更新;当事务2对该记录进行更新时,事务1再次读取该记录,读到的只能是事务2对其更新前的版本,要不就是事务2提交后的版本。
  • 事务1更新某行记录时,事务2不能对这行记录做更新,直到事务1结束。

REPEATABLE READ 的原理:

  • 事务在读取某数据的瞬间(就是开始读取的瞬间),必须先对其加 行级共享锁,直到事务结束才释放;
  • 事务在更新某数据的瞬间(就是发生更新的瞬间),必须先对其加 行级排他锁,直到事务结束才释放。

表现:

  • 事务1读取某行记录时,事务2也能对这行记录进行读取、更新;当事务2对该记录进行更新时,事务1再次读取该记录,读到的仍然是第一次读取的那个版本。
  • 事务1更新某行记录时,事务2不能对这行记录做更新,直到事务1结束。

SERIALIZABLE 的原理:

  • 事务在读取数据时,必须先对其加 表级共享锁 ,直到事务结束才释放;
  • 事务在更新数据时,必须先对其加 表级排他锁 ,直到事务结束才释放。

表现:

  • 事务1正在读取A表中的记录时,则事务2也能读取A表,但不能对A表做更新、新增、删除,直到事务1结束。
  • 事务1正在更新A表中的记录时,则事务2不能读取A表的任意记录,更不可能对A表做更新、新增、删除,直到事务1结束。

转载于:https://my.oschina.net/u/2330181/blog/2885346

相关文章:

  • 1.3创建项目「深入浅出ASP.NET Core系列」
  • 使用API自动生成工具优化前端工作流
  • dos基本命令
  • vue双向绑定原理及实现
  • Ubuntu
  • 阿里五年Java程序员的总结,献给还在迷茫中的你!
  • log4net配置
  • vue-cli在webpack的配置文件探究
  • oracle重命名数据库
  • C语言变长数组之剖析
  • pt-tools系列:pt-online-schema-change 最佳实践
  • 项目--HTML Canvas 和 jQuery遍历
  • 美团即时物流的分布式系统架构设计
  • java虚拟机运行机制
  • 20181124ACL的高级特性mask
  • 【5+】跨webview多页面 触发事件(二)
  • 【技术性】Search知识
  • Android 架构优化~MVP 架构改造
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Apache的基本使用
  • Java IO学习笔记一
  • java取消线程实例
  • leetcode讲解--894. All Possible Full Binary Trees
  • Spark RDD学习: aggregate函数
  • Vue UI框架库开发介绍
  • 再谈express与koa的对比
  • 怎样选择前端框架
  • 容器镜像
  • # Java NIO(一)FileChannel
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • $().each和$.each的区别
  • (6)设计一个TimeMap
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (附源码)计算机毕业设计ssm电影分享网站
  • (附源码)计算机毕业设计大学生兼职系统
  • (三)Honghu Cloud云架构一定时调度平台
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (已解决)什么是vue导航守卫
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)mysql使用Navicat 导出和导入数据库
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET框架设计—常被忽视的C#设计技巧
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .net下的富文本编辑器FCKeditor的配置方法
  • .NET正则基础之——正则委托
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • // an array of int