搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
IT小白
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
mq4气体传感器流程图_气体传感器Word版
2
关于Android源码文件目录分析--学习笔记_android abi-dumps目录
3
2024年(第十届)全国大学生统计建模大赛选题参考(一)
4
c语言实现数据结构--建立一颗二叉树_创建二叉树c语言
5
flutter项目从创建到运行,以及一些常用的命令_flutter工程的启动命令行
6
用PyTorch构建基于卷积神经网络的手写数字识别模型_pytorch完成手写数字分类模型
7
基于STM32设计的小说阅读器(翻页、字体切换、颜色切换、语音播报)_物联网单片机实现翻页
8
华为专用root工具_华为(HUAWEI)ROM安装包合集
9
解放人与设备距离,5G时代的远程操控该如何完成_如何远程连接5g终端
10
支持图片扩展等AI功能,PS 2023 v24.5 安装教程_ps的ai扩展是那个版本
当前位置:
article
> 正文
read uncommit, read commit, repeatable read, 共享锁VS排他锁
作者:IT小白 | 2024-03-15 08:57:02
赞
踩
read commit
一般大家都对事务的四种隔离模式比较熟悉,从松到严依次是:
- 读取未提交(Read uncommitted):处于此模式下可能会出现脏读、幻象读、不可重复读
- 读取已提交(Read committed):处于此模式下可能会出现幻象读、不可重复读
- 可重复读(Repeatable read):处于此模式下可能会出现幻象读
- 串行(Serialize):不会出现幻象读
那么脏读、幻象行、不可重复读是什么意思呢?
- 脏读:其它的事务(执行单个 select 语句也算一个事务)可以读取到某个事务更新(包括插入和删除)了但未提交的数据。脏读是应用中应该避免的,因为读取的是不可靠的数据(我觉得把这个叫做幻象行更形象,实际却不是)。一般数据库不会设定为这个模式,但有时候也会用到。脏读的好处是读取时不会对表或记录加锁,可以绕开写队列的排队,避免了等待。如在一个更新特别频繁的表中要选择表中所有的数据,就可以显示指定隔离级别:
select .... at isolation 0
- 不可重复读:这是描述在同一个事务中两条一模一样的 select 语句的执行结果的比较。如果前后执行的结果一样,则是可重复读;如果前后的结果可以不一样,则是不可重复读。这个特性从字面上也能看出来。
不可重复读的模式下首先不会出现脏读,即读取的都是已提交的数据。在一个事务中,读取操作是不会加排他锁的,当下一条一模一样的 select 语句的执行时,命中的数据集可能已经被其它事务修改了,这时候,还能读到相同的内容吗?
因此,要达到可重复读的效果,数据库需要做更多的事情,比如,对读取的数据行加共享锁,并保持到事务结束,以禁止其它事务修改它。这样会降低数据库的性能。而隔离级别的串行则比可重复读更严格。一般数据库的的隔离级别只设置到读取已提交。这是兼顾了可靠性和性能的结果。
上面还只提到了对命中的数据行加锁,以防止其它事务修改它。但没有提到,如果其它事务增加了符合条件的数据行怎么办?有些数据库对这种情况新定义了两个级别:读取稳定性和游标稳定性。前者不限制新增符合条件的数据行,而后者则阻止新增这样的数据行。
- 幻象读:是指两次执行同一条 select 语句会出现不同的结果,第二次读会增加一数据行,并没有说这两次执行是在同一个事务中。一般情况下,幻象读应该正是我们所需要的。但有时候却不是,如果打开的游标,在对游标进行操作时,并不希望新增的记录加到游标命中的数据集中来。隔离级别为 游标稳定性 的,可以阻止幻象读。
-------------------------------------
数据库中事务的 ACID 原则
原子性 (Atomicity):
事务的原子性是指一个事务中包含的一条语句或者多条语句构成了一个完整的逻辑单元,这个逻辑单元具有不可再分的原子性。这个逻辑单元要么一起提交执行全部成功,要么一起提交执行全部失败。
一致性 (Consistency):
可以理解为数据的完整性,事务的提交要确保在数据库上的操作没有破坏数据的完整性,比如说不要违背一些约束的数据插入或者修改行为。一旦破坏了数据的完整性,SQL Server 会回滚这个事务来确保数据库中的数据是一致的。
隔离性(Isolation):
与数据库中的事务隔离级别以及锁相关,多个用户可以对同一数据并发访问而又不破坏数据的正确性和完整性。但是,并行事务的修改必须与其它并行事务的修改相互独立,隔离。 但是在不同的隔离级别下,事务的读取操作可能得到的结果是不同的。
持久性(Durability):
数据持久化,事务一旦对数据的操作完成并提交后,数据修改就已经完成,即使服务重启这些数据也不会改变。相反,如果在事务的执行过程中,系统服务崩溃或者重启,那么事务所有的操作就会被回滚,即回到事务操作之前的状态。
我理解在极端断电或者系统崩溃的情况下,一个发生在事务未提交之前,数据库应该记录了这个事务的"ID"和部分已经在数据库上更新的数据。供电恢复数据库重新启动之后,这时完成全部撤销和回滚操作。如果在事务提交之后的断电,有可能更改的结果没有正常写入磁盘持久化,但是有可能丢失的数据会通过事务日志自动恢复并重新生成以写入磁盘完成持久化。
----------------------------------
共享锁【S锁】
又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
排他锁【X锁】
又称写锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。
----------------------------------
总结:隔离模式(isolation)其实就是对读写加锁的形象称谓,应用在每个具体事务上。对数据库本身而言,只有锁的概念并没有隔离模式的概念。当数据库发现某个对象被加上共享锁时,其他修改该对象的操作就被阻塞,直到该对象上的所有共享锁都被释放为止。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/IT小白/article/detail/239630
推荐阅读
article
【快速解决】Android Studio ERROR:
Read
timed
out_
android
...
Read
Time Out_
android
studio
下载
gradle
报错
read
timed
outandroi...
赞
踩
article
STM32CubeMX
| 利用
KEIL
将
代码
下载
能进内存(
S
RAM
)
实现
RAM
启动调试
代码
、解除读...
STM32CubeMX
| 利用
KEIL
将
代码
下载
能进内存(
S
RAM
)
实现
解除读
保护
目录
STM32CubeMX
| 利用...
赞
踩
article
java
.
net
.SocketTime
out
Exception:
Read
timed
out
的解决...
java
.
net
.SocketTime
out
Exception:
Read
timed
out
的解决过程_
java
.ne...
赞
踩
article
java
.
net
.SocketTime
out
Exception
Read
timed
out
报警...
通过接口读取数据时,报警。_
java
.
net
.sockettime
out
exception
java
.
net
.socket...
赞
踩
article
问题解决:
java
.
net
.SocketTime
out
Exception:
Read
timed
o...
问题解决:
java
.
net
.SocketTime
out
Exception:
Read
timed
out
_sockett...
赞
踩
article
pip安装模块报错
socket
.
time
out
: The
read
operat
ion timed ...
原因:超时报错解决设定超时时间,并且使用清华源pip--default-
time
out
=100 install -i h...
赞
踩
article
Linux之软件包管理_:
rpmdb
:
bdb2053
freeing
read
locks
for
...
一,包管理器1.1 二进制应用程序的组成部分: 二进制文件,库文件,配置文件,帮助文件1.2 程序包管理器 debian...
赞
踩
article
解决no
matching
host
key
type
found
. Their
offer
: ss...
【代码】解决no
matching
host
key
type
found
. Their
offer
: ssh-rsa ...
赞
踩
article
com.
jcraft
.
jsch
.JSchException
:
Session.
connect
:
ja...
2)上网搜寻这个错误,发现国内遇到这个问题不多。国外stackoverflow网站上有贴出一样的报错,但是引用的jar版...
赞
踩
article
APUE编程:12---文件I/O之(文件描述符、操作
函数
:
open
、
open
at、
creat
、cl...
这些
函数
都不带缓冲 一、
open
()、
open
at()#include
int
open
(const c...
赞
踩
article
linux
编程中的
超时
设置_
linux
read
timeout
...
http://blog.csdn.net/simba888888/article/details/9073963 htt...
赞
踩
article
一顿操作猛如虎,一看结果还是0,
Rust
能避免Go的BUG?_
help
:
maybe
it
is
o...
Google此前谈到Linux内核的未来与
Rust
的关系时曾表示,
Rust
现在已经准备好加入C语言,成为实现内核的实用语...
赞
踩
article
Processing of
multipart
/
form
-
data
request
failed
. ...
一.异常信息描述现网中出现上传过程中加载文件流异常错误的异常日志 二.具体定位过程 org.apache.commons...
赞
踩
article
Android
Studio
导入项目
下载
gradle
很慢或连接超时,提示:
Read
timed
o...
Android
Studio
导入项目
下载
grad一般来说,使用
Android
Studio
导入项目并
下载
gradle
的...
赞
踩
article
Android
Studio
导入新项目,
gradle
报
read
timed
out的情景之一_an...
我使用
Android
Studio
3.0导入新项目时,
gradle
报
read
timed
out的情景之一: 由于项目...
赞
踩
article
Gradle
sync
failed
“
read
time
out“_
gradle
sync
fai...
在使用Android Studio进行开发时,经常会碰到以下问题:在
Gradle
进行Project Sync时由于需要从...
赞
踩
article
GRADLE
自动更新出现
READ
TIMEOUT_
gradle
read
time
out...
在导入原始项目,或主动升级
GRADLE
时,
GRADLE
自动处理后,有时会出现
READ
TIMEOUT的错误,经常是下载某...
赞
踩
article
Gradle
重新安装
后下载插件失败
Read
timed
out
问题解决_
gradle
read
...
本地是可以拉取成功的,而本地从上面截图中地址下载一样是很慢的。经过两天的漫长折磨后,我开始寻找我本地安装
gradle
时,...
赞
踩
article
Gradle
sync
failed
: Read
timed
out
...
新买了一台电脑,安装android开发环境完毕后,第一次创建项目,build了好长时间(20多分钟)最后提示标题的错误,...
赞
踩
article
Android
Studio3.5.2初次安装
gradle
时出现Error:
read
time
ou...
最近安装
Android
Studio,总是出现报错,在查询了无数个解决办法后,终于安装成功了。这里提供以下方法,希望对大...
赞
踩
相关标签
android studio
android
ide
STM32
STM32读保护
MDK
SRAM启动
java
开发语言
hdfs
容器
linux
.net
服务器
pip
git
文件基本操作函数
linux编程
rust
golang
云原生
serverless