你了解Spring事物控制特性嗎

2021-09-23 13:39:30 字數 2979 閱讀 4071

原子性:強調事務的不可分割

一致性:強調的是事務的執行的前後,資料的完整性要保持一致

隔離性:乙個事務的執行不應該受到其他事務的干擾

永續性:事務一旦結束(提交/回滾)資料就持久保持到了資料庫

讀問題髒讀:乙個事務讀到另乙個事務還沒有提交的資料

不可重複讀:乙個事務讀到了另乙個事務已經提交的update資料,導致在當前的事務中多次查詢資料不一致

虛讀/幻讀:乙個事務讀到另乙個事務已經insert資料,導致當前事務中多次查詢結果不一致

寫問題引發兩類丟失更新

設定事務的隔離級別

read uncommitted :未提交讀。髒讀,不可重複讀,虛讀都可能發生

read committed :已提交讀。避免髒讀,不可重複讀和虛度有可能發生

repeatable read :可重複讀。避免髒讀和不可重複讀,虛讀可能發生

serializable :序列化的。避免髒讀,不可重複讀,虛讀的發生

select @@tx_isolation; 檢視隔離級別

set session transaction isolation level 級別; 設定隔離級別

演示髒讀

1.分別開啟兩個dos視窗 a.b

2.先檢視兩個視窗的隔離級別 select @@tx_isolation;

3.設定a視窗的隔離級別為未提交讀 

set session transaction isolation level read uncommitted;

4.分別在兩個視窗開啟事務

start transaction;

5.分別開啟兩個dos視窗 a.b

update account set money = money - 1000 where name = '張森';

update account set money = money + 1000 where name = '鳳姐';

6.在a視窗查詢資料

select * from account; -- a事務讀到了b事務還沒有提交的資料;

演示避免髒讀,演示不可重複讀傳送

1.分別開兩個視窗,a.b

2.設定a視窗的隔離級別:read committed 

set session transaction isolation level read committed;

3.分別在兩個視窗開啟事務 start transaction;

4.在b視窗完成轉賬

update account set money = money - 1000 where name = '張森';

update account set money = money + 1000 where name = '鳳姐';

5.在a視窗進行查詢 

select * from account; -- 避免髒讀

6.在b視窗提交事務

commit;

7.在a視窗中再次查詢 

select * from account;  轉賬成功.(不可重複讀:乙個事務讀到另乙個事務中已經提交的update的資料,導致多次查詢結果不一致.)

避免髒讀和不可重複讀,演示虛讀

1.分別開啟兩個視窗,a.b

2.設定a視窗的隔離級別:

repeatable read 

set session transaction isolation level repeatable read;

3.分別在兩個視窗中開啟事務 

start transaction;

4.在b視窗完成轉賬的操作 

update account set money = money - 1000 where name = '張森';

update account set money = money + 1000 where name = '鳳姐';

5.在a視窗查詢

select * from account; -- 轉賬沒有成功:避免髒讀.

6.在b視窗提交事務 

commit;

7.在a視窗再次查詢

select * from account; -- 轉賬沒有成功:避免不可重複讀.

避免虛讀

1.分別開啟兩個視窗,a.b

2.設定a視窗的隔離級別:repeatable read 

set session transaction isolation level repeatable read;

3.分別在兩個視窗中開啟事務

start transaction;

4.在b視窗完成插入操作 

insert into account values (null,'王老師',10000)

5.在a中進行查詢操作 

select * from account; -- 沒有查詢到任何結果

6.在b視窗提交事務 

commit; -- a視窗馬上就會顯示資料

你了解spring事務的傳播特性和隔離級別嗎

這塊了解一些,首先spring一共定義了七種事務傳播屬性 1.propagation required 支援當前事務,如果當前沒有事務,就新建乙個事務。這是最常見的選擇 2.propagation supports 支援當前事務,如果當前沒有事務,就以非事務方式執行 3.propagation ma...

Spring事物特性 隔離級別和傳播行為

原子性 atomicity 強調事務的不可分割.一致性 consistency 事務的執行的前後資料的完整性保持一致.隔離性 isolation 乙個事務執行的過程中,不應該受到其他事務的干擾 永續性 durability 事務一旦結束,資料就持久到資料庫 髒讀 a事物讀取到b事物未提交的資料,b事...

你必須了解Spring的生態

spring不止是提供了ioc aop的功能,還提供了大量的基於spring的專案,拿來用就行了,用於一站式開發,大大降低了開發的難度。下面列舉下主要的一些spring的生態專案 spring boot 一站式快速開發解決專案。spring cloud 提供對分布式系統的支援。spring data...