【数据库】事务隔离级别

news2024/9/21 18:40:32

事务特征ACID

  • 原子性(Atomicity):事务中的所有操作要么全部执行成功,要么全部失败回滚,没有中间状态。它确保了数据的完整性。
  • 一致性(Consistency):事务执行后,数据库从一个一致的状态转变为另一个一致的状态。执行事务前后,数据库中的数据满足所有定义的约束和规则。
  • 隔离性(Isolation):并发执行的事务之间相互隔离,不会互相干扰。每个事务感觉就像是独立运行的,即使多个事务并发执行,也不能看到其他事务未提交的修改。
  • 持久性(Durability):一旦事务被提交,其所做的修改将永久保存在数据库中,并且对系统的故障具有恢复能力。

脏读、不可重复读、幻读

  • 脏读(Dirty Read):一个事务读取到了另一个事务未提交的数据,并且如果第一个事务回滚,则读取到的数据是无效的。
  • 不可重复读(Non-Repeatable Read):一个事务在同一个查询中的多次读取可能会得到不同的结果,这是因为其他事务可能在两次读取之间提交了数据,导致数据不一致。
  • 幻读(Phantom Read):一个事务在同一个查询中的多次读取可能会发现新插入的数据或已删除的数据,这是因为其他事务可能在两次读取之间插入了新数据或删除了现有数据。

事务隔离级别

  • 读未提交(Read Uncommitted):最低的隔离级别,允许一个事务读取另一个事务尚未提交的数据。
  • 读已提交(Read Committed):允许一个事务只读取已经提交的数据,避免了脏读问题。
  • 可重复读(Repeatable Read):确保一个事务多次读取同一数据时结果一致,避免了不可重复读问题。
  • 串行化(Serializable):最高的隔离级别,通过串行执行事务来避免任何并发问题,包括脏读、不可重复读和幻读。

事务隔离级别与脏读、不可重复读、幻读

主流数据库的事务隔离级别

  • Oracle:默认的隔离级别是读已提交(Read Committed),支持其他隔离级别包括可串行化(Serializable)和只读(Read Only)。
  • MySQL:默认的隔离级别是可重复读(Repeatable Read),支持其他隔离级别包括读未提交(Read Uncommitted)、读已提交(Read Committed)和串行化(Serializable)。
  • PostgreSQL:默认的隔离级别是读已提交(Read Committed),支持其他隔离级别包括读未提交(Read Uncommitted)、可重复读(Repeatable Read)和可串行化(Serializable)。

事务隔离级别的使用场景

  • 读未提交(Read Uncommitted):几乎不用,适用于对数据一致性要求较低的场景,如临时查询、非关键业务。例如,一个用户正在编辑一个文档,另一个用户可以在该文档未保存的情况下查看它。这种情况下,可以使用读未提交的隔离级别,允许其他用户读取未提交的数据。
  • 读已提交(Read Committed):适用于大部分业务场景,避免脏读问题,同时提供较好的并发性能。例如,一个用户正在浏览一个在线商店的产品列表,另一个用户同时购买了一个产品并提交了订单。这种情况下,使用读已提交的隔离级别可以确保浏览用户只能看到已经提交的订单,避免了脏读问题。
  • 可重复读(Repeatable Read):适用于要求较高数据一致性的场景,避免脏读和不可重复读问题,如账务系统、订单处理。例如,一个用户正在查看自己的银行账户余额,同时另一个用户正在转账给该用户。使用可重复读的隔离级别可以确保查看用户在整个查询过程中看到的余额保持一致,避免了不可重复读问题。
  • 串行化(Serializable):适用于对数据一致性要求极高的场景,避免任何并发问题,如银行转账、库存管理。例如,一个用户正在从一个银行账户转账到另一个账户,同时另一个用户也在尝试转账到同一个账户。使用串行化的隔离级别可以确保每个转账操作依次执行,避免了并发问题。

需要注意的是,随着隔离级别的提高,事务的并发性能可能会下降,因为更严格的隔离级别需要更多的锁和资源管理。因此,在选择事务隔离级别时,需要权衡一致性和性能之间的关系,并根据实际业务需求和安全性要求进行选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/815460.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

02_modbus从站从开始初始化到接收一帧数据的流程

0. 协议栈接收状态的变化图 1.协议栈的初始化和使能 void eMBRTUStart( void ) {ENTER_CRITICAL_SECTION( );/* Initially the receiver is in the state STATE_RX_INIT. we start* the timer and if no character is received within t3.5 we change* to STATE_RX_IDLE. This…

网络请求fetch

fetch()是 XMLHttpRequest 的升级版,用于在 JavaScript 脚本里面发出 HTTP 请求。浏览器原生提供这个对象 fetch()的功能与 XMLHttpRequest 基本相同,但有三个主要的差异。 与 Ajax 类似,Fetch 也是前后端通信的一种方式。Fetch 要比 Ajax …

DBeaver远程连接使用DM数据库

DBeaver 工具版本使用 21.3.2 测试可用 数据库连接驱动包 需要提前下载DM数据库连接驱动DmJdbcDriver18.jar 驱动下载地址:https://eco.dameng.com/document/dm/zh-cn/app-dev/java-MyBatis-Plus-frame.html 配置数据库驱动 数据库 ---- 驱动管理 新建驱动 驱动…

Web3Space空间梅州站盛大开业:探索web3.0新时代的无限可能!

7月28日,Web3Space空间梅州站在广东省梅州市区盛大开业。 在互联网3.0时代,社会的生产关系与生产力都将发生变革,企业与个体都将拥抱数字化时代。可以预见未来企业的组织形态将会由过往的庞然大物”转向无数个小而美的“超级个体"。而We…

六.安装harbor

1、下载 harbor-offline-installer-v1.9.3 链接:https://pan.baidu.com/s/1dTCy2KPqRhYKxTyE7vlrPg 提取码:6666 需要安装docker-compose 2、修改配置 vim harbor.yml 修改hostname和port 3、安装 [rootlocalhost harbor]# ./prepare prepare b…

语音转录成文本:AI Transcription for mac

AI Transcription是一种人工智能技术,它可以将音频和视频文件转换成文本格式。这种技术可以帮助用户快速地将大量的音频和视频内容转换成文本格式,方便用户进行文本分析、搜索和编辑等操作。 以下是AI Transcription的几个特点: 高效性。AI …

【每日一题】142. 环形链表 II

【每日一题】142. 环形链表 II 142. 环形链表 II题目描述解题思路 142. 环形链表 II 题目描述 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针…

《Java极简设计模式》第02章:抽象工厂模式(AbstractFactoty)

作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 源码地址:https://github.com/binghe001/java-simple-design-patterns/tree/master/j…

【运维】hive 终端突然不能使用:Hive Schema version does not match metastore‘s schema version

文章目录 一. 问题描述二. 常规排查1. 元数据库2. hive-site.xml相关meta连接信息检查 三. 正解 一. 问题描述 进入hive终端,执行如下命令报错: hive> show tables; FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: …

初学HTML:采用CSS绘制一幅夏天的图

下面代码使用了HTML和CSS来绘制一幅炎炎夏日吃西瓜的画面。其中&#xff0c;使用了伪元素和阴影等技巧来实现部分效果。 <!DOCTYPE html> <html> <head><title>炎炎夏日吃西瓜</title><style>body {background-color: #add8e6; /* 背景颜…

浏览器中的自动化操作插件:Automa

相信很多小伙伴跟我一样&#xff0c;每天都有大量基于浏览器的重复操作&#xff0c;比如&#xff1a;查看任务、查看新闻、查看各种每天要关注的内容&#xff0c;甚至可能还需要对其做一些操作。那么这些任务是否有办法自动化执行呢&#xff1f; 今天就给大家推荐一个浏览器扩…

对角线遍历——力扣498

文章目录 题目描述法一 直接模拟 题目描述 法一 直接模拟 class Solution { public:vector<int> findDiagonalOrder(vector<vector<int>>& mat){int mmat.size(), nmat[0].size();vector<int> res;for(int i0;i<mn-1;i){if(i%2){int x i<n …

50家公司Java,C++招聘要求

目录 &#x1f34d;前言 &#x1f34d;总结 &#x1f333;基本要求 &#x1f333;加分项 &#x1f34d;信息 &#x1f442;下一秒&#xff08;电视剧《微微一笑很倾城》插曲&#xff09; - 张碧晨 - 单曲 - 网易云音乐 招聘要求 --> &#x1f34d;信息 &#x1f34d;…

分享一个 VUE 侧边导航共用组建

项目效果图&#xff1a; 项目描述&#xff1a;加载组建时&#xff0c;隐藏&#xff0c;鼠标滑动到指定区域的时候该菜单选中高亮&#xff0c;点击菜单跳转到指定模块&#xff0c;每个页面都适用。 html 部分&#xff1a; 提示&#xff1a;我这里有英文所以有$i18n.localezh…

UniPro助力金融企业数字化转型 强化项目协作与跟踪

根据一份来自Standish Group的研究报告&#xff08;"CHAOS Report"&#xff09;&#xff0c;该报告对美国各行业的项目进行了调查&#xff0c;结果显示仅有不到一半&#xff08;约44%&#xff09;的项目能够成功按时完成&#xff0c;并达到预期的业务目标。其中&…

行云管家荣获CFS第十二届财经峰会 “2023产品科技创新奖”

7月26日至27日&#xff0c;CFS第十二届财经峰会暨2023可持续商业大会在京盛大召开。峰会主题为“激活高质量发展澎湃活力”&#xff0c;超1000位政商领袖、专家学者、企业及媒体代表出席了本次盛会&#xff0c;共同分享新技术新产品新趋势、研判全球新挑战与新变局下企业的机遇…

掌握文件重命名快捷键,使用替换功能轻松删除文件名中的符号!

您是否经常面对繁琐的文件重命名工作&#xff1f;是时候掌握一些文件管理的小技巧&#xff0c;让您的工作更加高效便捷了&#xff01;现在&#xff0c;我们向您介绍一种简单的方法&#xff0c;通过文件重命名快捷键和替换功能&#xff0c;轻松删除文件名中的符号&#xff01; …

【chap6-字符串】用Python3刷《代码随想录》

字符串是由若干字符组成的有限序列&#xff0c;也可以理解为一个字符数组 344. 反转字符串 344. 反转字符串 思路&#xff1a;双指针法。定义两个指针&#xff08;即索引下标&#xff09;&#xff0c;一个从字符串前面&#xff0c;一个从字符串后面&#xff0c;两个指针同时…

机器学习:监督学习、无监督学习、半监督学习、强化学习

1 引言 机器学习是一种人工智能领域的技术&#xff0c;它旨在让计算机通过学习数据和模式&#xff0c;而不是明确地进行编程来完成任务。机器学习分为监督学习&#xff08;Supervised Learning&#xff09;、无监督学习&#xff08;Unsupervised Learning&#xff09;、半监督…

算法笔记(Java)——动态规划

动态规划方法论 动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff0c;如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。 所以动态规划中每一个状态一定是由上一个状态推导出来的&#xff0c;这一点就区分于贪心&#x…