隔離級別
隔離級別的值
導致的問題
read-uncommitted
0導致髒讀
read-committed
1避免髒讀,允許不可重複讀和幻讀
repeatable-read
2避免髒讀,不可重複讀,允許幻讀
serializable
3序列化讀,事物只能乙個乙個執行,避免了髒讀、不可重複讀、幻讀。執行效率慢,使用時謹慎
髒讀:一事務對資料進行了增刪改,但未提交,另一事務可以讀取到未提交的資料。如果第乙個事務這時候回滾了,那麼第二個事務就讀到了髒資料。
不可重複讀:乙個事務中發生了兩次讀操作,第一次讀操作和第二次操作之間,另外乙個事務對資料進行了修改,這時候兩次讀取的資料是不一致的。
幻讀:第乙個事務對一定範圍的資料進行了批量修改,第二個事務在這個範圍增加一條資料,這時候第乙個事務就會丟失對新增資料的修改。
總結:隔離級別越高,越能保證資料的完整性和一致性,但是對併發效能的影響也越大。
大多數的資料庫預設隔離級別為 read commited,比如 sqlserver、oracle。
少數資料庫預設隔離級別為:repeatable read 比如:mysql innodb
1、什麼是事務
乙個整體的執行邏輯單元,只有兩個結果,要麼全失敗,要麼全成功。
2、事務的特性
原子性、隔離性、一致性、永續性。
3、事務的基本原理
從資料庫角度來說,就是提供了一種後悔機制(**寫錯了,可以svn、git)
用臨時表才實現後悔
將資料操作先在臨時表中完成,完成過程中如果說沒有出現任何問題,就將資料同步(剪下)到實際的資料表中,並返回影響行數。
將資料操作先在臨時表中完成,完成過程中一旦出現錯誤,就將臨時表中滿足條件的資料清掉,並返回錯誤碼。
如果要相對乙個資料表的資料進行清空(千萬別用delete
from ,這種情況,一定就是鎖表)
加入 where條件,就是行鎖。
4、spring的事務配置
aop配置,配置哪些方法需要加事務。
宣告式事務配置,事務的傳播屬性、隔離級別、回滾的條件。
5、原始碼
通過解析配置檔案,得到transactiondefinition,實際上就是aop中的methodinterceptor(方法**)
就可以在滿足條件的方法呼叫之前和呼叫之後加一些東西。
platformtransactionmanger中的方法
gettransaction 呼叫了 transactonsynchronizationmanager 類的getresource()
從threadlocal裡面取值,map;
conn.setautocommit(false);
commit conn.commit();
rollback conn.rollback();
資料庫事務和Spring事務傳播
一 事務的基本要素 acid 1 原子性 atomicity 事務開始後所有操作,要麼全部做完,要麼全部不做,即事務是乙個不可分割的整體。2 一致性 consistency 事務開始前和結束後,資料庫的完整性約束沒有被破壞 3 隔離性 isolation 同一時間,不同的事務之間彼此沒有任何干擾。4...
Spring資料庫事務管理
事務 transaction 是併發控制的基本單位。所謂的事務,它是乙個操作序列,這些操作要麼都執行,要麼都不執行,它是乙個不可分割的工作單位。例如,銀行轉賬工作 從乙個賬號扣款並使另乙個賬號增款,這兩個操作要麼都執行,要麼都不執行,在關聯式資料庫中,乙個事務可以是一條sql語句 一組sql語句或整...
spring事務傳播機制與資料庫事務隔離級別
事務傳播行為型別 說明propagation required pr p ge n 傳輸 r kwa d 必須 如果當前沒有事務,就新建乙個事務,如果已經存在乙個事務中,加入到這個事務中。propagation supports s p t 支援 支援當前事務,如果當前沒有事務,就以非事務方式執行。...