【面試干貨】事務的并發問題(臟讀、不可重復讀、幻讀)與解決策略

【面試干貨】事務的并發問題(臟讀、不可重復讀、幻讀)與解決策略

  • 一、臟讀(Dirty Read)
  • 二、不可重復讀(Non-repeatable Read)
  • 三、幻讀(Phantom Read)
  • 四、總結


💖The Begin💖點點關注,收藏不迷路💖

在數據庫管理系統(DBMS)中,事務的并發執行是提高系統性能的關鍵。然而,并發執行也帶來了一系列的問題,如 臟讀、不可重復讀和幻讀。本文將詳細解釋這些并發問題,并探討相應的解決策略。

一、臟讀(Dirty Read)

1、定義

臟讀是指一個事務讀取了另一個事務尚未提交的數據。由于被讀取的數據可能由于某些原因被回滾,因此該數據是“臟”的,即不可靠 的。

2、示例

假設 事務A讀取了事務B尚未提交的對某個數據行的修改,隨后事務B發生錯誤并執行了回滾操作。此時,事務A讀取到的數據就是臟數據,因為它已經不再是數據庫中的當前狀態

3、解決策略

為了避免臟讀,DBMS采用了隔離級別的概念。通過設置不同的隔離級別,可以控制事務之間的可見性。例如,在 可重復讀(Repeatable Read)或串行化(Serializable) 隔離級別下,事務只能讀取已經提交的數據,從而避免了臟讀。

二、不可重復讀(Non-repeatable Read)

1、定義

不可重復讀 是指在一個事務內,多次讀取同一數據,但由于其他事務的修改并提交,導致該事務先后讀取到的數據結果不一致。

2、示例

假設事務A兩次讀取同一數據行,在兩次讀取之間,事務B修改了該數據行并提交。此時,事務A第二次讀取到的數據與前一次不同,即發生了不可重復讀

3、解決策略

為了解決不可重復讀問題,DBMS同樣采用了隔離級別的概念。在 可重復讀(Repeatable Read)或串行化(Serializable) 隔離級別下,事務在開始時會獲取一個數據快照,并在整個事務過程中始終基于該快照進行讀取操作,從而保證了多次讀取結果的一致性

三、幻讀(Phantom Read)

1、定義

幻讀 是指在一個事務內,執行相同的查詢操作,但由于其他事務的插入或刪除操作并提交,導致該事務兩次查詢到的結果集不一致

2、示例

假設事務A執行了一個范圍查詢(如查詢年齡大于20且小于30的所有用戶),在查詢結果返回后,事務B插入了一個年齡為25的新用戶并提交此時,如果事務A再次執行相同的范圍查詢,會發現新的用戶記錄“憑空出現”了,即發生了幻讀

3、解決策略

幻讀 的解決策略通常依賴于特定的數據庫管理系統和隔離級別。在 串行化(Serializable) 隔離級別下,DBMS會 通過加鎖等機制來防止其他事務的插入或刪除操作,從而避免了幻讀。此外,一些數據庫管理系統還提供了特定的查詢選項或語句來避免幻讀。

如: 使用SELECT … FOR UPDATE語句來鎖定查詢結果集中的所有行。

四、總結

事務的并發執行是數據庫管理系統提高性能的重要手段,但同時也帶來了一系列并發問題。通過合理設置隔離級別和采用相應的解決策略,我們可以有效地避免臟讀、不可重復讀和幻讀等并發問題,確保數據庫的一致性和可靠性。

在這里插入圖片描述


💖The End💖點點關注,收藏不迷路💖

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/15533.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/15533.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/15533.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Stable Diffusion——U-ViT用于擴散建模的 ViT 主干網

1.概述 擴散模型是最近出現的強大的深度生成模型,可用于生成高質量圖像。擴散模型發展迅速,可應用于文本到圖像生成、圖像到圖像生成、視頻生成、語音合成和 3D 合成。 除了算法的改進,骨干網的改進在擴散建模中也發揮著重要作用。一個典型…

nginx代理前端html

正常配置,通過www.example.com或192.168.20.12:80訪問server {listen 80;server_name example.com www.example.com;root /var/www/html;index index.html index.htm;location / {try_files $uri $uri/ 404;} }解釋: listen 80;:監聽 HTTP 端…

汽車R155法規中,汽車獲取到的VTA證書,E后面的數字表示什么意思?

標簽: 汽車R155法規中,汽車獲取到的VTA證書,E后面的數字表示什么意思?; 汽車;VTA認證; 有些廠商汽車拿到的VTA證書上面寫著E9, 有些廠商汽車拿到的VTA證書上面寫著E5,E9與E5有什么差…

嵌入式之音頻基礎知識

聲音特性 1、響度:人主觀上感覺聲音的大小(俗稱音量),由“振幅”和人離聲源的距離決定,振幅越大響度越大,人和聲源的距離越小,響度越大; 2、音調:聲音的高低&#xff0…

多商戶消費券系統源碼(ThinkPHP+FastAdmin+微信公眾號)

打造智能促銷新體驗 一、引言:消費券系統的時代意義 在當今這個數字化高速發展的時代,電子商務和移動支付已經成為人們日常生活的重要組成部分。隨著市場競爭的加劇,多商戶消費券系統作為一種創新的促銷手段,正逐漸受到商家和消…

k8s筆記 | helm包管理

什么是Helm kubenetes包管理器,是查找,分享和使用軟件構件 kubernetes的最佳方式; 可以做什么 從頭開始創建新的chart將chart打包成歸檔(tgz)文件與存儲chart的倉庫進行交互與現有的kubernates集群中安裝和卸載chart管理與Helm一起安裝的 …

從零訓練yolov8

1.收集數據 2.數據標注 pip install labelimg3.劃分數據集 0.2的驗證機0.8的訓練集 import os from shutil import copyfile from sys import exit import randomsource r"D:\Data\imgs\screenc" \\ target_train r"D:\Data\imgs\datasets\mydata\images\t…

aws msk加密方式和問控制連接方式

msk加密方式 msk提供了兩種加密方式 靜態加密傳輸中加密 創建集群時可以指定加密方式,參數如下 aws kafka create-cluster --cluster-name "ExampleClusterName" --broker-node-group-info file://brokernodegroupinfo.json --encryption-info file:/…

Android四大組件 Broadcast廣播機制

一 概述 廣播 (Broadcast) 機制用于進程或線程間通信,廣播分為廣播發送和廣播接收兩個過程,其中廣播接收者 BroadcastReceiver 是 Android 四大組件之一。BroadcastReceiver 分為兩類: 靜態廣播接收者:通過 AndroidManifest.xm…

flutter 實現旋轉星球

先看效果 planet_widget.dart import dart:math; import package:flutter/material.dart; import package:vector_math/vector_math_64.dart show Vector3; import package:flutter/gestures.dart; import package:flutter/physics.dart;class PlanetWidget extends StatefulW…

echarts-樹圖、關系圖、桑基圖、日歷圖

樹圖 樹圖主要用來表達關系結構。 樹圖的端點也收symbol的調節 樹圖的特有屬性: 樹圖的方向: layout、orient子節點收起展開:initialTreeDepth、expandAndCollapse葉子節點設置: leaves操作設置:roam線條&#xff1a…

告別 Dart 中的 Future.wait([])

作為 Dart 開發人員&#xff0c;我們對異步編程和 Futures 的強大功能并不陌生。過去&#xff0c;當我們需要同時等待多個 future 時&#xff0c;我們依賴 Future.wait([]) 方法&#xff0c;該方法返回一個 List<T>。然而&#xff0c;這種方法有一個顯著的缺點&#xff1…

2、xss-labs之level2

1、打開頁面 2、傳入xss代碼 payload&#xff1a;<script>alert(xss)</script>&#xff0c;發現返回<script>alert(xss)</script> 3、分析原因 打開f12&#xff0c;沒什么發現 看后端源碼&#xff0c;在這form表單通過get獲取keyword的值賦給$str&am…

跑大模型的經驗

LLama2: 1. 使用torchrun來跑&#xff1a; torchrun --nproc_per_node 1 example_text_completion.py \--ckpt_dir llama-2-7b/ \--tokenizer_path tokenizer.model \--max_seq_len 128 --max_batch_size 4 關于集群分布式torchrun命令踩坑記錄&#xff08;自用&#xff09;…

【Vue】input框自動聚焦且輸入驗證碼后跳至下一位

場景&#xff1a;PC端 樣式&#xff1a; <div class"verification-code-input"><input v-model"code[index]" v-for"(_, index) in 5" :key"index" type"text" maxlength"1" input"handleInput(i…

渲染管線——應用階段

知識必備——CPU和GPU 應用階段都做了什么 應用階段為渲染準備了什么 1.把不可見的數據剔除 2.準備好模型相關數據&#xff08;頂點、法線、切線、貼圖、著色器等等&#xff09; 3.將數據加載到顯存中 4.設置渲染狀態&#xff08;設置網格需要使用哪個著色器、材質、光源屬性等…

說些什么好呢

大一&#xff1a;提前學C和C。學完語法去洛谷或者Acwing二選一&#xff0c;刷300道左右題目。主要培養編程思維&#xff0c;讓自己的邏輯能夠通過代碼實現出來。 現在對算法有點感興趣但是沒有天賦&#xff0c;打不了acm&#xff0c;為就業做準備咯。 大二(算法競賽)&#xff1…

常用損失函數學習

損失函數&#xff08;Loss Function&#xff09;&#xff0c;在機器學習和統計學中&#xff0c;是用來量化模型預測輸出與真實結果之間差異的函數。簡而言之&#xff0c;損失函數衡量了模型預測的好壞&#xff0c;目標是通過最小化這個函數來優化模型參數&#xff0c;從而提高預…

簡述js的事件循環以及宏任務和微任務

前言 在JavaScript中&#xff0c;任務被分為同步任務和異步任務。 同步任務&#xff1a;這些任務在主線程上順序執行&#xff0c;不會進入任務隊列&#xff0c;而是直接在主線程上排隊等待執行。每個同步任務都會阻塞后續任務的執行&#xff0c;直到它自身完成。常見的同步任…

【機器學習】機器學習與大型預訓練模型的前沿探索:跨模態理解與生成的新紀元

&#x1f512;文章目錄&#xff1a; &#x1f4a5;1.引言 ?2.跨模態理解與生成技術概述 &#x1f6b2;3.大型預訓練模型在跨模態理解與生成中的應用 &#x1f6f4;4.前沿探索與挑戰并存 &#x1f44a;5.未來趨勢與展望 &#x1f4a5;1.引言 近年來&#xff0c;機器學習領…