mysql 幻讀,臟讀和不可重復讀

	MySQL的臟讀、幻讀和不可重復讀是數據庫事務處理中的三種常見問題,它們都涉及到數據的一致性和并發性。

一,臟讀

臟讀是指一個事務讀取了另一個事務未提交的數據。這可能導致數據不一致的問題。
例如:
用戶user1的初始balance是100,事務A減少了他的余額50,并進行其余的操作,但還未提交
同時
事務B正在讀取user1的數據,讀到他的balance為50
但是隨后
可能其余的操作發生了某種錯誤,事務A回滾了,user1的余額現在還是100
那么事務B讀到的user1的balance=50就是個臟讀數據

-- 事務A
START TRANSACTION;
SELECT * FROM users WHERE id = 1; -- 假設此時用戶1的balance數據為100
UPDATE users SET balance = balance - 50 WHERE id = 1;
********* 其余操作
COMMIT;-- 事務B
START TRANSACTION;
SELECT * FROM users WHERE id = 1; -- 此時用戶1的balance數據為50,因為事務A已經修改了數據
COMMIT;                            

解決方案:
使用事務的隔離級別來避免臟讀。MySQL提供了四種隔離級別:
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE
其中,READ UNCOMMITTED是最低的隔離級別,它允許臟讀;而SERIALIZABLE是最高的隔離級別,它可以避免臟讀、不可重復讀和幻讀。在創建事務時,可以通過以下命令設置隔離級別:

 
-- 設置隔離級別為READ UNCOMMITTED
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

二,幻讀

幻讀是指一個事務在多次查詢中返回了不一致的結果。例如,假設有兩個事務C和D,C首先按照某個范圍條件(如id>10 and id<20)查詢了表中的數據,然后D在這個范圍內插入了新的數據。當C再次查詢這個范圍時,它可能會發現多了一些新插入的數據。這就是幻讀。
解決方案:
使用事務的隔離級別來避免幻讀。與臟讀類似,通過設置合適的隔離級別可以解決幻讀問題。此外,還可以使用行級鎖或表級鎖來限制查詢的范圍,從而避免幻讀的發生。

三,不可重復讀

不可重復讀是指在一個事務內,多次讀取同一數據返回的結果不一致。這通常發生在一個事務內先進行了一次查詢操作,然后又對該數據進行了更新操作,而另一個事務在此期間也對該數據進行了更新操作。當第一個事務再次讀取該數據時,它讀取到的是更新后的值,而不是初始值。這就是不可重復讀。
例如:
事務A中讀取user1的balance是100
同時
事務B更新的user1的balance是50,并提交成功了事務
然后
事務A又來讀取user1的balance,結果是50,兩次讀取結果就不一致,導致了不可重復讀。
解決方案:同樣可以使用事務的隔離級別和行級鎖來避免不可重復讀。另外,MySQL還提供了一個特殊的鎖——可重復讀鎖(Repeatable Read),它可以避免不可重復讀的問題。要使用可重復讀鎖,可以在查詢語句前加上FOR REPLICATE READ關鍵字

四,隔離級別

不同的隔離級別對并發問題的解決情況:

隔離級別 臟讀 幻讀 不可重復讀 第一類丟失更新 第二類丟失更新
READ UNCOMMITED(讀未提交) 允許 允許 允許 不允許 允許
READ COMMITTED(讀已提交) 不允許 允許 允許 不允許 允許
REPEATABLE READ(可重復讀) 不允許 允許 不允許 不允許 不允許
SERIALIZABLE (串行化) 不允許 不允許 不允許 不允許 不允許

隔離級別臟讀幻讀不可重復讀
READ UNCOMMITED(讀未提交)允許允許允許
READ COMMITTED(讀已提交不允許允許允許
REPEATABLE READ(可重復讀)不允許允許不允許
SERIALIZABLE (串行化)不允許不允許不允許

注意:事務的隔離級別和數據庫并發性是成反比的,隔離級別越高,并發性越低。
在MySQL的InnoDB存儲引擎中,REPEATABLE READ(RR)隔離級別通過多版本并發控制(MVCC)和一致性快照來實現非鎖定讀取,并防止幻讀。

五,設置隔離級別

  1. 查看當前的用戶隔離級別
select @@tx_isolation; 
  1. 修改當前登錄用戶的隔離級別
set session transaction isolation level read uncommitted;
  1. 修改全局的隔離級別需要使用root登錄執行
set global transaction isolation level read uncommitted;

或者修改mysql.ini配置文件,在最后加上

[mysqld]
transaction-isolation = REPEATABLE-READ

其中可以選擇隔離級別有:READ-UNCOMMITTED、READ-COMMITTED、 REPEATABLE-READ、SERIALIZABLE

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

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

相關文章

java項目之智慧圖書管理系統設計與實現(springboot+vue+mysql)

風定落花生&#xff0c;歌聲逐流水&#xff0c;大家好我是風歌&#xff0c;混跡在java圈的辛苦碼農。今天要和大家聊的是一款基于springboot的智慧圖書管理系統設計與實現。項目源碼以及部署相關請聯系風歌&#xff0c;文末附上聯系信息 。 項目簡介&#xff1a; 智慧圖書管理…

SOCKET編程(5):IO復用

IO復用 多進程/線程并發模型&#xff0c;為每個sockets分配一個進程/線程 I/O&#xff08;多路&#xff09;復用&#xff0c;采用單個進/線程就可以管理多個socket I/O復用有3種方案&#xff1a; selectpollepoll select I/O多路復用詳解 27、fd_set與FD_SETSIZE詳解 詳解…

新聞資訊微信小程序開發后端+php【附源碼,文檔說明】

博主介紹&#xff1a;?IT徐師兄、7年大廠程序員經歷。全網粉絲15W、csdn博客專家、掘金/華為云//InfoQ等平臺優質作者、專注于Java技術領域和畢業項目實戰? &#x1f345;文末獲取源碼聯系&#x1f345; &#x1f447;&#x1f3fb; 精彩專欄推薦訂閱&#x1f447;&#x1f3…

管理科學SCI、SSCI雙檢索,自引率低,無預警風險,對國人相當友好!

一、期刊名稱 Journal of Organizational and End User Computing 二、期刊簡介概況 期刊類型&#xff1a;SSCI 學科領域&#xff1a;管理學 影響因子&#xff1a;6.5 中科院分區&#xff1a;2區 出版方式&#xff1a;開放出版 版面費&#xff1a;$3300 三、期刊征稿范圍…

探秘錢塘高中,筑夢未來之旅————杭州市錢塘高級中學

晨曦微露&#xff0c;書生瑯瑯&#xff0c;古韻今風交織在這方學府&#xff0c;滔滔的錢塘江畔&#xff0c;杭州市錢塘高級中學屹立于此。這所學校自1958年建校伊始&#xff0c;走過幾十年的光輝歲月&#xff0c;一直致力于提供優質的教育資源。 近年來&#xff0c;學校獲得多項…

Learning C# Programming with Unity 3D

作者&#xff1a;Alex Okita 源碼地址&#xff1a;GitHub - badkangaroo/UnityProjects: A repo for all of the projects found in the book. 全書 686 頁。

Java常見數據結構---八大結構

前言&#xff1a; 數據結構是計算機底層存儲、組織數據的方式。是指數據相互之間是以什么方式排列在一起的。 通常情況下&#xff0c;精心選擇的數據結構可以帶來更高的運行或者存儲效率 常見的八大數據結構&#xff1a; 棧&#xff1a; 思想&#xff1a; 棧是一種數據結構&…

大數據項目中的拉鏈表(hadoop,hive)

緩慢漸變維 拉鏈表 拉鏈表&#xff0c;可實現數據快照&#xff0c;可以將歷史和最新數據保存在一起 如何實現: 在原始數據增加兩個新字段 起始時間&#xff08;有效時間&#xff1a;什么時候導入的數據的時間&#xff09;&#xff0c;結束時間&#xff08;默認的結束時間為99…

運籌系列92:vrp算法包VROOM

1. 介紹 VROOM is an open-source optimization engine written in C20 that aim at providing good solutions to various real-life vehicle routing problems (VRP) within a small computing time. 可以解決如下問題&#xff1a; TSP (travelling salesman problem) CVRP …

九、 個人信息出境標準合同的簽署及備案流程是怎樣的?

為指導和幫助個人信息處理者規范有序備案個人信息出境標準合同&#xff0c;國家網信辦結合此前備案實踐經驗發布了《標準合同備案指南&#xff08;第二版&#xff09;》&#xff0c;并就個人信息出境標準合同備案的適用范圍、備案方式、備案流程和材料以及咨詢、舉報聯系方式等…

F5 BIG-IP Next Central Manager SQL注入漏洞(CVE-2024-26026、CVE-2024-21793)

0x01 產品簡介 BIG-IP Next Central Manager是BIG-IP Next的原生默認用戶界面,它可跨平臺管理BIG-IP Next實例。BIG-IP Next是F5 Networks公司推出的一款下一代BIG-IP軟件,提供了多云應用安全和應用交付服務。 0x02 漏洞概述 CVE-2024-26026:BIG-IP Next Central Manager…

產品推薦 | 基于AMD Virtex 7 FPGA VC709 的高速連接功能開發板

01 產品概述 Virtex? 7 FPGA VC709 連接功能套件是一款速率為 40Gb/s 的高速平臺&#xff0c;您可以通過評估和開發連接功能&#xff0c;迅速為包含所有必要軟硬件和 IP 核的高帶寬和高性能應用提供強大的支持。它包括一個含有 PCI Express Gen 3、Northwest Logic 公司推出的…

4.1 文本相似度(二)

目錄 1 文本相似度評估 2 代碼 2.1 load_dataset 方法 2.2 AutoTokenizer、AutoModelForSequenceClassification 1 文本相似度評估 對兩個文本拼接起來&#xff0c;然后作為一個樣本喂給模型&#xff0c;作為一個二分類的任務&#xff1b; 數據處理的方式以及訓練的基本流程…

c 指針基礎

/* 指針練習*/ #include <stdio.h> #include <stdlib.h> void printAll(int n1, int n2, int *p1, int *p2); int main(){ //賦值操作語法演示 int num1 1111; int num2 2222; int *prt1 &num1; int *prt2 &num2; printAll(num1, num2, prt1…

maven .lastUpdated文件作用

現象 有時候我在用maven管理項目時會發現有些依賴報錯&#xff0c;這時你可以看一下本地倉庫中是否有.lastUpdated文件&#xff0c;也許與它有關。 原因 有這個文件就表示依賴下載過程中發生了錯誤導致依賴沒成功下載&#xff0c;可能是網絡原因&#xff0c;也有可能是遠程…

平面設計基礎指南:從零開始的學習之旅!

平面設計師主要做什么&#xff1f; 平面設計師通過創建視覺概念來傳達信息。他們創造了從海報和廣告牌到包裝、標志和營銷材料的所有內容&#xff0c;并通過使用形狀、顏色、排版、圖像和其他元素向觀眾傳達了他們的想法。平面設計師可以在內部工作&#xff0c;專門為品牌創建…

Mac安裝jadx

1、使用命令brew安裝 : brew install jadx 輸入完命令,等待安裝完畢 備注&#xff08;關于Homebrew &#xff09;&#xff1a; Homebrew 是 MacOS 下的包管理工具&#xff0c;類似 apt-get/apt 之于 Linux&#xff0c;yum 之于 CentOS。如果一款軟件發布時支持了 homebrew 安…

mac定時任務、自啟動任務

https://quail.ink/mynotes/p/mac-startup-configuration-detailed-explanation <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.d…

【2024年5月備考新增】】 考前篇(2)《官方平臺 - 考生模擬練習平臺常用操作(一)》

軟考考生常用操作說明 說明:模擬作答系統是旨在讓考生熟悉計算機化考試環境和作答方式,模擬作答不保存考生作答 歷史記錄。考試題型、題量、分值、界面及文字內容以正式考試答題系統為準。 1 如何標記試題、切換試題 2 簡答題如何查看歷史記錄、切換輸入法 3 選做題,已作答…

游戲找不到steam_api64.dll如何解決,介紹5種簡單有效的方法

面對“找不到steam_api64.dll&#xff0c;無法繼續執行代碼”的問題&#xff0c;許多游戲玩家或軟件使用者可能會感到手足無措。這個錯誤提示意味著你的計算機系統在嘗試運行某個游戲或應用程序時&#xff0c;無法定位到一個至關重要的動態鏈接庫文件——steam_api64.dll&#…