数据库四种隔离等级

2024-06-09 19:04
文章标签 数据库 四种 隔离 等级

本文主要是介绍数据库四种隔离等级,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

持续更新以及完善中…

数据库事务隔离

首先,为什么要有事务隔离呢?

在单线程下,没什么大碍,但是我们想要提高效率,采用多线程并发时,便会出现一些问题。

**下面的问题一定要当作一个事务来看待!!!!**不要觉得连续两次查询就是一次事务了,这里的两次查询是处于同一个事务,你可以当作两次查询一次是写在函数开头,一次是写在了函数末尾。

void task(){selectBySql();.....干了其他事情,或者没干。selectBySql();
}
  • 脏写

A有100块,现在给自己又转了20(就变成120了),现在B给A转了20块(变成了140),但是A转给自己20的事务因为某些原因出错导致回滚,又变成了100块。导致B不管先一步提交(120)还是后一步提交(140),都不是120块。

  • 脏读

A转给自己20块,B读取了A资产发现有120块,但是A又因为某些问题导致回滚,B再去读A的资产发现变成了100块

  • 不可重复读

在这里插入图片描述

  • 幻读

A查询比自己财产更多的用户,发现只有C用户。

这个时候B和D用户开了账户,并转了很多钱进去。

A再次查询比自己财产更多的用户,发现出现了C,B,D用户(这是上次读取时未出现过的啊)

read uncommit(读未提交)

Oracle默认隔离规则。(效率高)

读数据不需要锁,写数据需要锁。

解决了脏写问题(写操作互斥)

但是出现脏读问题。

read commit(读已提交)

MySQL默认隔离规则(效率较高)。

只有更新事务成功提交,才能查询到本次更新.

A转账给自己20(初始100块),必须提交成功,其他人查询A的资产时才能看到120块.

解决脏读问题.

插播一条(MVCC)

MVCC

mutil version concurrent control

多版本并发控制,同一时刻同一条记录在系统中可以存在多个版本

只有当写数据事务提交时,才能读到最新的数据。

通过Read View (一致性视图)。

害,东西太多太多了,本人现在的理解就是。

初始阶段,A的资产记录是version1.0。 A执行更新的事务(更新到version2.0),然后B去读A的资产,只要是A执行更新事务没有提交,只能读到version1.0的数据。当A回滚时不会出现问题,当A提交后数据库中A资产数据更新到version2.0,但B需要提交本次查询事务,在下一次查询的时候才能看到version2.0的数据…

REPEATABLE READ(可重复读)

在整个事务过程中该事务看到的记录,自始至终都是一样的。

A转账给自己20(初始100块),必须提交成功

其他人查询A的资产时的事务也提交后,随后的查询事务才能读取到120块.

serializable (串行)

解决所有问题。但是效率最低,无并发,读和写都需要上锁。

画饼


看到舍友们在复习数据库期末考试, 然后想到上学期学的时候对于事务以及并发这里学校并未怎么讲到.

然后学后端现在也开始进入到处理分布式,并发这些问题了.

先给自己挖一个数据库学习的坑吧.

这篇关于数据库四种隔离等级的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1046028

相关文章

关于如何更好管理好数据库的一点思考

本文尝试从数据库设计理论、ER图简介、性能优化、避免过度设计及权限管理方面进行思考阐述。 一、数据库范式 以下通过详细的示例说明数据库范式的概念,将逐步规范化一个例子,逐级说明每个范式的要求和变换过程。 示例:学生课程登记系统 初始表格如下: 学生ID学生姓名课程ID课程名称教师教师办公室1张三101数学王老师101室2李四102英语李老师102室3王五101数学王老师101室4赵六103物理陈

数据库期末复习知识点

A卷 1. 选择题(30') 2. 判断范式(10') 判断到第三范式 3. 程序填空(20') 4. 分析填空(15') 5. 写SQL(25') 5'一题 恶性 B卷 1. 单选(30') 2. 填空 (20') 3. 程序填空(20') 4. 写SQL(30') 知识点 第一章 数据库管理系统(DBMS)  主要功能 数据定义功能 (DDL, 数据定义语

给数据库的表添加字段

周五有一个需求是这样的: 原来数据库有一个表B,现在需要添加一个字段C,我把代码中增删改查部分进行了修改, 比如insert中也添入了字段C。 但没有考虑到一个问题,数据库的兼容性。因为之前的版本已经投入使用了,再升级的话,需要进行兼容处理,当时脑子都蒙了,转不过来,后来同事解决了这个问题。 现在想想,思路就是,把数据库的表结构存入文件中,如xxx.sql 实时更新该文件: CREAT

SQL Server中,查询数据库中有多少个表,以及数据库其余类型数据统计查询

sqlserver查询数据库中有多少个表 sql server 数表:select count(1) from sysobjects where xtype='U'数视图:select count(1) from sysobjects where xtype='V'数存储过程select count(1) from sysobjects where xtype='P' SE

SQL Server中,添加数据库到AlwaysOn高可用性组条件

1、将数据添加到AlwaysOn高可用性组,需要满足以下条件: 2、更多具体AlwaysOn设置,参考:https://msdn.microsoft.com/zh-cn/library/windows/apps/ff878487(v=sql.120).aspx 注:上述资源来自MSDN。

SQL Server中,用Restore DataBase把数据库还原到指定的路径

restore database 数据库名 from disk='备份文件路径' with move '数据库文件名' to '数据库文件放置路径', move '日志文件名' to '日志文件存放置路径' Go 如: restore database EaseWe from disk='H:\EaseWe.bak' with move 'Ease

数据库原理与安全复习笔记(未完待续)

1 概念 产生与发展:人工管理阶段 → \to → 文件系统阶段 → \to → 数据库系统阶段。 数据库系统特点:数据的管理者(DBMS);数据结构化;数据共享性高,冗余度低,易于扩充;数据独立性高。DBMS 对数据的控制功能:数据的安全性保护;数据的完整性检查;并发控制;数据库恢复。 数据库技术研究领域:数据库管理系统软件的研发;数据库设计;数据库理论。数据模型要素 数据结构:描述数据库

MySQL数据库(四):视图和索引

在数据库管理中,视图和索引是两种关键工具,它们各自发挥独特的作用以优化数据查询和管理。视图通过简化复杂查询、提高数据安全性和提供数据抽象,帮助用户轻松访问数据。而索引则通过加速查询、确保数据唯一性以及优化排序和分组操作,显著提升数据库性能。理解和合理运用这两者,对数据库系统的高效运行至关重要。 目录 一、视图概念(面试) 二、视图的作用(面试) 三、视图的创建和使用 3.1

Java中如何优化数据库查询性能?

Java中如何优化数据库查询性能? 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨在Java中如何优化数据库查询性能,这是提升应用程序响应速度和用户体验的关键技术。 优化数据库查询性能的重要性 在现代应用开发中,数据库查询是最常见的操作之一。随着数据量的增加和业务复杂度的提升,数据库查询的性能优化显得尤为重

BD错误集锦7——在集成Spring MVC + MyBtis时使用c3p0作为数据库时报错Method com/mchange/v2/c3p0/impl/NewProxyPreparedStatem

异常信息如下: Type Exception ReportMessage Handler dispatch failed; nested exception is java.lang.AbstractMethodError: Method com/mchange/v2/c3p0/impl/NewProxyPreparedStatement.isClosed()Z is abstractDescr