mysql 執行事務操作
1.原子性
乙個事務包含多個操作,這些操作要麼全部執行,要麼全都不執行。實現事務的原子性,要支援回滾操作,在某個操作失敗後,回滾到事務執行之前的狀態。
2.一致性
執行事務操作,比如轉賬,兩個人互相轉賬 ,不管轉多少次, 錢的總數額是不會改變的。
3.永續性
事務提交後,就是對資料庫資料的修改儲存。
4.隔離性
併發事務之間互相影響的程度,比如乙個事務會不會讀取到另乙個未提交的事務修改的資料。
髒讀:事務a修改了乙個資料,但未提交,事務b讀到了事務a未提交的更新結果,如果事務a提交失敗,事務b讀到的就是髒資料。
不可重複讀:在同乙個事務中,對於同乙份資料讀取到的結果不一致。比如,事務b在事務a提交前讀到的結果,和提交後讀到的結果可能不同。不可重複讀出現的原因就是事務併發修改記錄,要避免這種情況,最簡單的方法就是對要修改的記錄加鎖,這回導致鎖競爭加劇,影響效能。另一種方法是通過mvcc可以在無鎖的情況下,避免不可重複讀。
幻讀:在同乙個事務中,同乙個查詢多次返回的結果不一致。事務a新增了一條記錄,事務b在事務a提交前後各執行了一次查詢操作,發現後一次比前一次多了一條記錄。幻讀是由於併發事務增加記錄導致的,這個不能像不可重複讀通過記錄加鎖解決,因為對於新增的記錄根本無法加鎖。需要將事務序列化,才能避免幻讀。
事務的隔離級別從低到高有:
理解MySQL的事務
事務解決的問題 轉賬問題。甲向乙轉賬1000元 執行步驟 1 甲的賬戶 1000 2 乙的賬戶 1000 如果執行第一步之後,第二步出現問題,此時資料就發生了錯誤。事務就是把一組操作打包在一起,執行的時候能夠保證這些操作之間滿足一定的特性,避免出現上面的問題。事務的特性 1 原子性 乙個事務是乙個不...
mysql事務隔離性的理解
事務是對一組操作原子性的保障,但正是由於事務,就會出現事務a和事務b資料之間的可見性問題 髒讀,幻讀,不可重複讀 為了解決問題,才設定了隔離級別這種東西 隔離級別的一種實現思想就是mvcc,一行資料由於多個事務的修改可能會有多個版本。每次讀取的是資料最新版本。事務之間不是併發執行的。事務在每次執行語...
MySQL原理解讀 事務
資料庫事務有4個屬性,我們叫它們acid,分別為原子性 一致性 隔離性和永續性 1.1 原子性 atomicity 乙個事務內的操作是不可分割的,要麼都成功,要麼都失敗 事務把資料從乙個正確的狀態遷移到另乙個正確的狀態 併發事務相互隔離 多個事務之間的操作過程不可見 資料是持久化儲存的 比如存到磁碟...