事務隔離級別

2021-08-25 08:07:29 字數 2244 閱讀 1754

隔離級別越高,效能越低

1. serializable(序列化):可避免髒讀、不可重複讀、虛讀情況的發生;

2. reapeatable read(可重複讀):可避免髒讀、不可重複讀的情況的發生;

3. read committed(讀已提交):可避免髒讀的情況

4. read uncommitted(讀未提交):最低級別,任何情況均無法保證;

1.演示髒讀發生

a視窗set

transaction

isolation

level

read uncommitted;

start

transaction;

select * from account;

-------------發現a帳戶是1000元,轉到b視窗

select * from account;

-------------發現a帳戶是1100元,發生了髒讀(這個事務讀取到了別的事務未提交的資料)

b視窗start

transaction;

update account set money=money+100

where name='aaa';

-------------事務在不提交的情況下,轉到a視窗進行查詢

2.避免髒讀,並演示不可重複讀問題的發生

a視窗set

transaction

isolation

level

read committed;

start

transaction;

select * from account;

-------------發現a帳戶是1000元,轉到b視窗

select * from account;

-------------發現a帳戶是1000元,這時我們發現read committed這種級別可以避免髒讀

-------------轉到b視窗

select * from account;

-------------發現a帳戶是1100元,這時就發生不可重複讀(指這個事務讀取到了別的事務提交的資料)

b視窗start

transaction;

update account set money=money+100

where name='aaa';

-------------事務在不提交的情況下,轉到a視窗進行查詢

commit;

-------------轉到a視窗

3.避免髒讀、不可重複讀,並演示虛讀問題的發生

a視窗set

transaction

isolation

level repeatable read;

start

transaction;

select * from account;

--------------------發現a帳戶是1000元,並且表的總紀錄數是3條,這時轉到b視窗

select * from account

--------------------發現a帳戶是1000元,這說明repeatable read這種級別可避免髒讀

-------------------轉到b視窗

select * from account

---------------------發現a帳戶是1000元,這說明repeatable read這種級別還可以避免不可重複讀

---------------------轉到b視窗

select * from account

---------------------發現表中可能會多出一條ddd的記錄,這就發生了虛讀,也就是在這個事務內讀取了別的事務插入的資料(幻影資料)

b視窗start

transaction;

update account set money=money+100

where name='aaa';

---------------------轉到a視窗

commit;

---------------------轉到a視窗

start

transaction;

insert

into account(name,money) values('ddd','1000');

commit;

--------------------轉到a視窗

4、實現最高端別

事務隔離級別

1 serializable 最嚴格的spring事務隔離級別,事務序列執行,資源消耗最大 3 read committed 大多數主流資料庫的預設spring事務隔離等級,保證了乙個事務不會讀到另乙個並行事務已修改但未提交的資料,避免了 髒讀取 該級別適用於大多數系統。4 read uncommi...

事務隔離級別

四種隔離級別 隔離級別 髒 讀不可重複讀取 幻 像讀操作未提交 read uncommitted 是是 是讀操作已提交 read committed 否是 是可重複讀 repeatable read 否否 是快照否否 否可序列讀 serializable 否否 否 sql server 還支援使用行...

事務隔離級別

需要防止的現象和事務隔離級別 ansi iso sql 標準 sql92 定義了四種事務隔離級別 transaction isolation level 這四種隔離級別所能提供的事務處理能力各不相同。這些事務隔離級別是針對三種現象定義的,在併發事務執行時,需要阻止這三種現象 中的一種或多種發生。三種...