Mysql 事務特性和級別

2022-09-23 09:36:54 字數 2237 閱讀 9583

資料庫事務(簡稱:事務)是資料庫管理系統執行過程中的一個邏輯單位,由一個有限的資料庫操作序列構成。

分別是原子性、一致性、隔離性、永續性。

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

一致性是指事務必須使資料庫從一個一致性狀態變換到另一個一致性狀態,也就是說一個事務執行之前和執行之後都必須處於一致性狀態。舉例來說,假設使用者a和使用者b兩者的錢加起來一共是1000,那麼不管a和b之間如何轉賬、轉幾次賬,事務結束後兩個使用者的錢相加起來應該還得是1000,這就是事務的一致性。

隔離性是當多個使用者併發訪問資料庫時,比如同時操作同一張表時,資料庫為每一個使用者開啟的事務,不能被其他事務的操作所幹擾,多個併發事務之間要相互隔離。關於事務的隔離性資料庫提供了多種隔離級別,稍後會介紹到。

永續性是指一個事務一旦被提交了,那麼對資料庫中的資料的改變就是永久性的,即便是在資料庫系統遇到故障的情況下也不會丟失提交事務的操作。例如我們在使用jdbc運算元據庫時,在提交事務方法後,提示使用者事務操作完成,當我們程式執行完成直到看到提示後,就可以認定事務已經正確提交,即使這時候資料庫出現了問題,也必須要將我們的事務完全執行完成。否則的話就會造成我們雖然看到提示事務處理完畢,但是資料庫因為故障而沒有執行事務的重大錯誤。這是不允許的。

read uncommitted(未提交讀)

在未提交讀這個事務級別中,一個事務可以讀取到另外一個事務未提交的資料.

例如 a 事務更新了一個欄位,但是未提交在 b 事務中,讀取id為1000的記錄的name欄位的時候,name的值為'aaa',可是 a 事務並沒有commit,所以name = 'aaa'有可能是會被回滾的,那麼,a 事務讀取了未提交事務的資料稱為髒讀(dirty read)

read committed(提交讀)

提交讀這個事務級別中,一個事務可以讀取到另外一個事務提交之後的資料.

例如 a 事務讀取到了id為1000的記錄的name欄位為aaa ,然後 b 事務這個時候更新了這條記錄的name值,並且提交了,這個時候 a 事務再次讀取name的話,name的值就是bbb了,所以在一個事務中,對一個欄位進行多次讀取,可能得到的值不同.

a事務前後兩次讀取的值不一致!

repeatable read(可重複讀)

可重複讀這個事務級別中,一個事務重複去讀的欄位不會改變.

例如 a 事務讀取到了id為1000的記錄的name值為aaa,然後 b 事務中把name改成了bbb,並且 b 事務提交了,a 事務再次去讀name的時候並不會讀取到bbb,所以 a 事務相當於在一個獨立的世界,外界的任何改動不會影響 a 事務.

但是,可重複讀會導致幻讀出現,什麼是幻讀呢,舉個例子:

a 事務查詢一個表,表裡只有一條記錄,id為1,但是這個時候 b 事務插入了一條資料,id為2,a 事務因為不知道有id為2的資料,所以這個時候a也插入了一條id為2的資料,這個時候肯定會插入失敗.這種情況就是幻讀

備註: mysql中的innodb通過mvcc(多版本併發控制)解決了幻讀,另外mysql的預設事務級別就是可重複讀,oracle和sql server 預設隔離級別為 已提交讀(read committed)

serializable(可序列化)

可序列化事務級別,把讀取的每一行資料都加了鎖

加鎖了的有點就是,避免了髒讀和幻讀,另外還避免了不可重複讀的可能性,但是因為加鎖了,減少了很大的併發性,因為同一時刻,只有一個執行緒能夠獲取到鎖.還可能導致大量超時問題.

小結:不可重複讀的和幻讀很容易混淆,不可重複讀側重於修改,幻讀側重於新增或刪除。解決不可重複讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表

隔離級別:

隔離級別

髒讀(dirty read)

不可重複讀(nonrepeatable read)

幻讀(phantom read)

未提交讀(read uncommitted)

可能可能

可能    

已提交讀(read committed)

不可能可能

可能可重複讀(repeatable read)

不可能不可能

可能可序列化(serializable )

不可能不可能

不可能級別越高,資料越安全,但效能越低。

MySQL Disk SSD 特性

ssd 特性 1 隨機讀能力非常好,連續讀效能一般,但比普通 sas 磁碟好 2 不存在磁碟尋道的延遲時間,隨機寫和連續寫的響應延遲差異不大...

MySQL 儲存引擎的特性

常用儲存引擎的對比 特點myisam innodb memory merge ndb儲存限制 有64tb有沒有 有事務安全 支援鎖機制 表鎖...

MySQL 5 7 特性 Online DDL

mysql 的 ddl 有很多種方法。 mysql 本身自帶三種方法,分別是 copy inplace instant。 有一些第三方工具也可以實現 ddl 操作,最常見的是 percona 的 pt online schema change 工具 簡稱為 pt osc ,和 github 的 gh...