事務的基本要素(acid)
事務隔離級別原因:併發事務導致的髒讀,不可重複讀,幻讀。
髒讀和不可重複讀的區別:髒讀讀到的是未提交的資料,而不可重複讀讀到的是已經提交的資料。
不可重複讀和虛讀/幻讀的區別:不可重複讀側重於修改,虛讀/幻讀側重的是新增/刪除。
解決方法:通過事務隔離級別去解決,以下四個隔離級別需要對應的資料庫引擎自己支援,而不是spring本身去支援,spring只是整合使用而言。read committed (讀已提交)
當前事務可以讀到另乙個事務提交後的資料。
可以避免髒讀,但不可重複讀和幻讀問題仍然可能出現。
read uncommitted (讀未提交)
當前事務可以讀到另乙個事務未提交的資料。
髒讀,不可重複讀,幻讀都可能會出現。
repeatable_read(可重複讀)
確保事務可以多次從乙個欄位中讀取相同的值。在這個事務持續期間,禁止其他事務對這個字段進行更新。
可以避免髒讀和不可重複讀,但是幻讀的問題依然存在。
serializable(序列化)
確保事務可以從乙個表中讀取相同的行,在這個事務持續期間,禁止其他事務對該錶執行插入,更新,刪除。
所有的併發問題都能避免,但是效能比較低。
mysql支援四種隔離級別,預設採用repeatable_read。oracle只支援read committed 和serializable(序列化),預設read committed。
mysql 隔離性與隔離級別
提到事務,你肯定不陌生,和資料庫打交道的時候,我們總是會用到事務。最經典的例子就是轉賬,你要給朋友小王轉 100 塊錢,而此時你的銀行卡只有 100 塊錢。轉賬過程具體到程式裡會有一系列的操作,比如查詢餘額 做加減法 更新餘額等,這些操作必須保證是一體的,不然等程式查完之後,還沒做減法之前,你這 1...
SQL 隔離級別與事務
前言 事物 事物是指一組原子性的sql查詢。如 銀行轉賬 a要轉賬給b100,在資料庫中至少三步 1.a的賬戶查詢餘額大於100,2.a賬戶減少100,3.b的賬戶要增加100這樣這個事物才算真的完成,這裡的幾條sql語句應該一起完成或者失敗,失敗就會發生回滾,成功則提交事務。隔離 隔離的產生主要是...
MySql事務與隔離級別
事務是由一組sql語句組成的邏輯處理單元,是滿足 acid 特性的一組操作,可以通過 commit 提交乙個事務,也可以使用 rollback 進行回滾。事務具有以下4個屬性,通常簡稱為事務的acid屬性 事務b讀取到了事務a已修改但尚未提交的的資料,還在這個資料基礎上做了操作。此時,如果a事務回滾...