資料庫 Spring事務

2021-08-18 13:28:38 字數 1461 閱讀 2825

隔離級別

隔離級別的值

導致的問題

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 支援 支援當前事務,如果當前沒有事務,就以非事務方式執行。...