mysql 事物的隔離級別

2021-09-09 05:44:47 字數 1789 閱讀 3719

事物的隔離級別

隔離級別設定

事務有四個屬性,稱為acid屬性:

1、原子性(atomicity):事務是乙個原子單位,要麼全部執行,要麼全部不執行。

2、一致性(consistent):事務的開始和結束,資料都必須保持一致狀態。

3、隔離性(isolation):資料庫系統提供隔離機制,保證併發事務之間是互相不干擾的。也就意味著事務處理過程中的中間狀態對其他的事務是透明的。

4、永續性(durable):事務完成之後,對資料的修改是永久性的,即使出現系統故障也能夠保持

事務是一系列sql語句的集合,如果沒有事務,會出現什麼問題?或者說sql只能一條一條的單個執行,會出現什麼問題?

這個很簡單,如果沒有事務,我們平時生活中的銀行轉賬就無法操作。

資料庫讀現象

acid屬性裡面有乙個是隔離級別,即併發事務之間互相不干擾。互相不干擾只是乙個終極狀態,且需要消耗巨大的效能。在我們實際應用過程中,是存在很大的灰度空間的:隔離級別有程度的區分。所以如果隔離程度控制的比較弱的話,就會產生髒讀、不可重複讀以及幻讀的現象。

1、髒讀

事務t1修改某個欄位的值,然後事務t2讀取該值,此後t1撤銷了對該字段的更新,或者更新成另外的值才commit到資料庫中,這樣t2讀取的資料是無效的或者錯誤的。導致t2依據髒資料所做的操作也是錯誤的。

---------思聰同學中午去食堂吃飯,看到窗邊的座位被如花同學占有了,思聰認為這個座位已經被占有了,就轉身去找其他的座位。不料,如花同學起身離開了。事實是:如花並不是吃飯,而是臨時坐在那裡等她的約會物件,只是臨時小坐一會,並沒有真正「commit」。

2、不可重複讀

在資料庫訪問中,乙個事務範圍內的兩次相同的查詢卻返回了不同的資料。

事務t1讀取某一資料,事務t2讀取並修改了該資料,t1為了對讀取值進行驗證而重新讀取,卻發現得到了不同的結果。

---------思聰同學中午去食堂吃飯,看到窗邊的座位是空的,便屁顛屁顛的跑去打飯,回來後卻發現這個座位被如花同學搶去了。

3、幻讀

幻讀解決了不可重複讀的問題,即在同乙個事務範圍內,兩次相同的查詢結果是相同的。但是可以新增表中的資料記錄。

幻讀是指事務t1對錶中的資料進行修改,假設修改涉及了表中全部的資料行,同時第二個事務也修改這個表中的資料,這種修改是向表中插入一條新的資料。後面就會出現操作了t1事務的使用者發現表中還有沒有修改的資料行,彷彿出現了幻覺一樣。

--------思聰同學中午去食堂吃飯,看到窗邊的座位是空的,便屁顛屁顛的跑去打飯,回來後窗邊的座位還是空的,便很高興坐上去準備開始吃飯,這時候卻發現如花同學搬了乙個小板凳坐在旁邊狼吞虎嚥,思聰頓時沒有了胃口。

如果需要解決髒讀、不可重複讀、幻讀等這些資料庫讀現象,就必須相應提高事務的隔離級別。但是資料庫的隔離級別越高,對應的併發能力就越弱,效能也就相應的越差,所以我們還需根據具體的應用場景去權衡。

1、讀未提交

2、讀提交

3、可重複讀

4,可序列讀

mysql事物隔離級別

複習鞏固加深印象 一。事務 acid原子性,隔離性,一致性,永續性 二。事務隔離級別 通常併發事務處理 1 寫 寫,存在更新丟失問題 2 讀 寫,有隔離性問題,可能遇到髒讀,不可重複讀,幻讀 其中 1.髒讀 a事務讀到b未提交的資料 2.不可重複讀 a事務第二次讀時讀到了b事務提交的寫資料,可能導致...

MySQL事物隔離級別

mysql其實是分為server層和引擎層。server層包括 聯結器 分析器 優化器 執行器 以及查詢快取。在這裡執行的一些mysql自己的一些邏輯,比如函式 儲存過程 檢視 觸發器,但是還沒有真正的去資料檔案中讀取資料。引擎層 innodb myisam memory 負責資料的查詢和提取。現在...

mysql事物隔離級別

事物是區分檔案儲存系統與nosql資料庫重要特性之一,其存在的意義是為了保證即使在併發情況下也能正確的執行crud操作。怎樣才算是正確的呢?這時提出了事物需要保證的四個特性即acid a 原子性 atomicity c 一致性 consistency i 隔離性 isolation d 永續性 du...