目录
repeatable read
禁止不可重复读取和脏读取,但是有时可能出现幻影数据
Serializable
提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。
首页 数据库 mysql教程 数据库事务的隔离级别

数据库事务的隔离级别

Jun 07, 2016 pm 03:58 PM
主要 事务 数据库 级别 解决 软件 隔离 需要

数据库软件需要解决的主要问题为数据一致性和访问并发性之间的矛盾,在理论上人们总结出保证数据一致性需要解决的几种不确定性情况,并以此为基础提出了数据库事务的几种隔离级别。 首先,来看一下,解决数据一致性的过程中,方法会发生的几种不确定情况。

数据库软件需要解决的主要问题为“数据一致性”和“访问并发性”之间的矛盾,在理论上人们总结出保证数据一致性需要解决的几种不确定性情况,并以此为基础提出了数据库事务的几种隔离级别。

首先,来看一下,解决数据一致性的过程中,方法会发生的几种不确定情况。

脏读:

脏读又称无效数据的读出,是指在数据库访问的过程中,事务T1对某一值进行了修改,在没有提交之前,事务T2可以读取到事务T1的修改,由于T1事务还没有提交,因此T2读到的T1事务数据时无效的,即该数据为脏数据。

不可重复读:

在一个事务内,多次读同一个数据。在这个事务还没有结束时,另一个事务也访问该同一数据。那么,在第一个事务的两次读数据之间。由于第二个事务的修改,那么第一个事务读到的数据可能不一样,这样就发生了在一个事务内两次读到的数据是不一样的,因此称为不可重复读,即原始读取不可重复

通过将事务的隔离级别设置为repeatable read可以防止不可重复读,在oracle中,我们可以通过select for update达到同样的效果。

幻读:

情况1:

第一个事务对一个表中的数据进行了修改,比如这种修改涉及到表中的“全部数据行”。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入“一行新数据”。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样.

情况2:

事务T1查询表t1(5条)和t2(10条)中的记录总数之和(应为15),在事务T1查询完表t1之后并在查询t2 之前,事务T2向t1和t2中分别插入两条记录,并提交,随后事务T1查询t2中的记录总数,并得出结果t1=5 t2=12,总记录数17,实际的记录总数应为15或者19,不存在17,就像出现了幻觉

解决幻读需要将事务的隔离级别设置为serialization,即串行化

为了避免出现上面的几种情况,在标准SQL规范中,定义了4个事务隔离级别。

Read Uncommited

为了避免允许脏读取,但不允许更新丢失。如果一个事务已经开始写数据,则另外一个事务则不允许同时进行写操作,但允许其他事务读此行数据

Read Commited

允许不可重复读取,但不允许脏读取。

repeatable read

禁止不可重复读取和脏读取,但是有时可能出现幻影数据

Serializable

提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。

√: 可能出现 ×: 不会出现

  脏读 不可重复读 幻读
Read uncommitted
Read committed ×
Repeatable read × ×
Serializable × × ×
在oracle数据库中,存在READ COMMITED(默认),Serializable,readonly 三种隔离级别。不同的数据库软件对隔离级别的实现方式是不同的,实现的程度也是不同的,需要具体情况具体分析。
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
<🎜>掩盖:探险33-如何获得完美的色度催化剂
2 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1676
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
iOS 18 新增'已恢复”相册功能 可找回丢失或损坏的照片 iOS 18 新增'已恢复”相册功能 可找回丢失或损坏的照片 Jul 18, 2024 am 05:48 AM

苹果公司最新发布的iOS18、iPadOS18以及macOSSequoia系统为Photos应用增添了一项重要功能,旨在帮助用户轻松恢复因各种原因丢失或损坏的照片和视频。这项新功能在Photos应用的"工具"部分引入了一个名为"已恢复"的相册,当用户设备中存在未纳入其照片库的图片或视频时,该相册将自动显示。"已恢复"相册的出现为因数据库损坏、相机应用未正确保存至照片库或第三方应用管理照片库时照片和视频丢失提供了解决方案。用户只需简单几步

如何在PHP中处理数据库连接错误 如何在PHP中处理数据库连接错误 Jun 05, 2024 pm 02:16 PM

PHP中处理数据库连接报错,可以使用以下步骤:使用mysqli_connect_errno()获取错误代码。使用mysqli_connect_error()获取错误消息。通过捕获并记录这些错误信息,可以轻松识别并解决数据库连接问题,确保应用程序的顺畅运行。

在PHP中使用MySQLi建立数据库连接的详尽教程 在PHP中使用MySQLi建立数据库连接的详尽教程 Jun 04, 2024 pm 01:42 PM

如何在PHP中使用MySQLi建立数据库连接:包含MySQLi扩展(require_once)创建连接函数(functionconnect_to_db)调用连接函数($conn=connect_to_db())执行查询($result=$conn->query())关闭连接($conn->close())

所有软件变成WPS打开,恢复exe默认打开方式 所有软件变成WPS打开,恢复exe默认打开方式 Jun 19, 2024 am 01:48 AM

小伙伴电脑所有软件打开方式都变成是以WPS打开,无法正常运行,所有exe都打不开,包括任务管理器、注册表、控件面板、设置等,打开全是WPS乱码。这种情况没法远程,远程软件也是exe,看似无解,就来看看二零是怎么操作的,让小伙伴电脑恢复正常。这是由于exe的打开方式改为了WPS,只需要恢复默认打开方式即可。二零在正常电脑上把关于exe注册表信息导出,放到网站。因为浏览器是可以打开的,指引小伙伴,打开我们的网站,复制注册表信息,在桌面新建文本文档,另存为【文件名:1.reg;保存类型:所有文件(*.

三星 Galaxy Z Flip6 评测:简约设计与实用体验,小折的版本答案来了?! 三星 Galaxy Z Flip6 评测:简约设计与实用体验,小折的版本答案来了?! Jul 30, 2024 pm 12:54 PM

在折叠屏领域,小折叠屏凭借着轻盈便携、精致小巧的时尚属性,同样备受很多年轻用户的喜爱。在之前的三星GalaxyZFold6大折叠屏评测中,我给了它「更方更AI」的评价。而与它同一时间发布的小折叠屏——三星GalaxyZFlip6,同样备受瞩目。那么它又会有怎样的体验?今天,我们就一起来解锁这款时尚新品。「轻」设计:流于指尖的时尚颜值和GalaxyZFold6一样,GalaxyZFlip6机身采用了方正形态的设计。展开形态下,机身比一般的直板机还要修长,前后以直边中框衔接,四个R角保留了圆润的形态

清华光学 AI 登 Nature!物理神经网络,反向传播不需要了 清华光学 AI 登 Nature!物理神经网络,反向传播不需要了 Aug 10, 2024 pm 10:15 PM

用光训练神经网络,清华成果最新登上了Nature!无法应用反向传播算法怎么办?他们提出了一种全前向模式(FullyForwardMode,FFM)的训练方法,在物理光学系统中直接执行训练过程,克服了传统基于数字计算机模拟的限制。简单点说,以前需要对物理系统进行详细建模,然后在计算机上模拟这些模型来训练网络。而FFM方法省去了建模过程,允许系统直接使用实验数据进行学习和优化。这也意味着,训练不需要再从后向前检查每一层(反向传播),而是可以直接从前向后更新网络的参数。打个比方,就像拼图一样,反向传播

如何在 Golang 中将 JSON 数据保存到数据库中? 如何在 Golang 中将 JSON 数据保存到数据库中? Jun 06, 2024 am 11:24 AM

可以通过使用gjson库或json.Unmarshal函数将JSON数据保存到MySQL数据库中。gjson库提供了方便的方法来解析JSON字段,而json.Unmarshal函数需要一个目标类型指针来解组JSON数据。这两种方法都需要准备SQL语句和执行插入操作来将数据持久化到数据库中。

如何在 Golang 中使用数据库回调函数? 如何在 Golang 中使用数据库回调函数? Jun 03, 2024 pm 02:20 PM

在Golang中使用数据库回调函数可以实现:在指定数据库操作完成后执行自定义代码。通过单独的函数添加自定义行为,无需编写额外代码。回调函数可用于插入、更新、删除和查询操作。必须使用sql.Exec、sql.QueryRow或sql.Query函数才能使用回调函数。

See all articles