mysql 事務隔離級別 詳解

2022-03-03 07:57:54 字數 2232 閱讀 2872

在工作中真實遇到的問題:用python連線mysql,查詢資料,同時有別的**在更新mysql中的資料,前者是一直是保持連線的資料庫,每一分鐘select一次,但第二次卻查不到更新後的資料?why?

mysql客戶端連線查詢不到最新資料的問題?

應該是mysql的事務隔離級別的設定問題,把 mysql 的 innodb 的預設事務隔離級別是重複讀(repeatable read)修改為 提交讀(read committed) 即可。

概念:

例如:在關聯式資料庫中,乙個事務可以是一條sql語句,一組sql語句或整個程式。

舉例

修改表中的資料,首先是刪除原有記錄,然後再插入,有2步,但是如果插入失敗的話會導致資料丟失。

用事務的概念來處理:刪除和插入是一件事情,只有2步都成功,資料才發生改變。否者,恢復到原來的資料。

1.serializable (序列化):可避免髒讀、不可重複讀、幻讀的發生。

2.repeatable read (可重複讀):可避免髒讀、不可重複讀的發生。【在乙個事務中,對於同乙份資料的讀取結果總是相同的,無論是否有其他事務對這份資料進行操作,以及這個事務是否提交】

3.read committed (讀已提交):可避免髒讀的發生。【只有在事務提交後,其更新結果才會被其他事務看見】

4.read uncommitted (讀未提交):最低級別,任何情況都無法保證。

** 對於多數應用程式,可以優先考慮把資料庫系統的隔離級別設為read committed,它能夠避免髒讀,而且具有較好的併發效能。

** 每個資料庫連線都有乙個全域性變數@@tx_isolation,表示當前的事務隔離級別。

在mysql資料庫中檢視當前事物的隔離級別:

select @@tx_isolation; 或者是 show variables like '%iso%';

在mysql資料庫中設定事務的隔離級別為 read committed :

如果遇到不允許修改:

是因為許可權問題,先登出mysql,切換到root下,然後再去修改 @@tx_isolation

1.原子性(atomicity)

是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾。因此事務的操作如果成功就必須要完全應用到資料庫,如果操作失敗則不能對資料庫有任何影響。

2.一致性(consistency)

一致性是指事務必須使資料庫從乙個一致性狀態變換到另乙個一致性狀態,也就是說乙個事務執行之前和執行之後都必須處於一致性狀態。

拿轉賬來說,假設使用者a和使用者b兩者的錢加起來一共是5000,那麼不管a和b之間如何轉賬,轉幾次賬,事務結束後兩個使用者的錢相加起來應該還得是5000,這就是事務的一致性。

3.隔離性(isolation)

隔離性是當多個使用者併發訪問資料庫時,比如操作同一張表時,資料庫為每乙個使用者開啟的事務,不能被其他事務的操作所干擾,多個併發事務之間要相互隔離。

即要達到這麼一種效果:對於任意兩個併發的事務t1和t2,在事務t1看來,t2要麼在t1開始之前就已經結束,要麼在t1結束之後才開始,這樣每個事務都感覺不到有其他事務在併發地執行。

關於事務的隔離性資料庫提供了多種隔離級別,即上文提到的。

4.永續性(durability)

永續性是指乙個事務一旦被提交了,那麼對資料庫中的資料的改變就是永久性的,即便是在資料庫系統遇到故障的情況下也不會丟失提交事務的操作。

例如我們在使用jdbc運算元據庫時,在提交事務方法後,提示使用者事務操作完成,當我們程式執行完成直到看到提示後,就可以認定事務以及正確提交,即使這時候資料庫出現了問題,也必須要將我們的事務完全執行完成,否則就會造成我們看到提示事務處理完畢,但是資料庫因為故障而沒有執行事務的重大錯誤。

MySQL事務,事務隔離級別詳解

1 什麼是事務指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。2 事務的4個特性原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 3 每個特性的意思 原子性原子性是指事務是乙個不可再分割的工作單位,事務中的...

MySQL事務隔離級別詳解

sql標準定義了4類隔離級別,包括了一些具體規則,用來限定事務內外的哪些改變是可見的,哪些是不可見的。低階別的隔離級一般支援更高的併發處理,並擁有更低的系統開銷。read uncommitted 讀取未提交內容 在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,因...

MySQL事務隔離級別詳解

sql標準定義了4類隔離級別,包括了一些具體規則,用來限定事務內外的哪些改變是可見的,哪些是不可見的。低階別的隔離級一般支援更高的併發處理,並擁有更低的系統開銷。read uncommitted 讀取未提交內容 在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,因...