2014/7/27------資料庫的隔離性,201427------

來源:互聯網
上載者:User

2014/7/27------資料庫的隔離性,201427------

示範不同隔離等級下的並發問題

1.當把事務的隔離等級設定為read uncommitted ,會引發髒讀,不可重複讀取,虛讀


A視窗

start transaction isolation  level  read uncommitted;

start transaction;

select * from account;

=======這個時候發現aaa的賬戶是1000元,轉到B視窗

select * from acount where name=='aaa';

=======發現aaa的賬戶多了100元,這個時候a視窗讀到的資料時b視窗未提交的資料(髒讀);


B視窗

start transaction;(有這句話,不寫commit語句,資料是不會提交到資料庫的)

update account set money=money+100  where name='aaa';

------不要提交,轉到A視窗查詢


2..當把事務的隔離等級設定為read committed ,會引發不可重複讀取,虛讀,但可避免髒讀;

A視窗

start transaction isolation  level  read committed;

start transaction;

select * from account;

=======這個時候發現aaa的賬戶是1000元,轉到B視窗

select * from acount where name=='aaa';

=======發現aaa的賬戶多了100元,這個時候a視窗讀到了別的事務提交的資料,兩次讀取到的是不同的資料(不可重複讀取);

 

B視窗

start transaction;

update account set money=money+100  where name='aaa';

commit;

-----轉到a視窗


3.當把事務的隔離等級設定為repeatable read(mysql 預設層級) ,會引發虛讀,但可避免髒讀,不可重複讀取;


A視窗:

set transaction isolation level repeatable read;

start transaction ;

select * from account;

=======發現有4條記錄,轉到b視窗

select * from account;

========可能發現有5條記錄,這時候發生了a讀取到另外一個事務插入的資料(虛讀)


B視窗

start transaction;

insert  into acount(name,money) values('ggg',1000);

commit;

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


4.當把事務的隔離等級設定為Serializable ,會避免所有的問題;

A視窗:

set transaction isolation level repeatable read;

start transaction ;

select * from account;

=======發現有4條記錄,轉到b視窗



B視窗

start transaction;

insert  into acount(name,money) values('ggg',1000);

-------發現不能插入,只能等待a結束事務才能插入






資料庫的隔離等級

第四步的值為 0 第六步為100 第三步雖然更新了,但是沒有提交,還沒有寫入資料庫,所以第三步查詢的,仍為資料庫的原值。第五步做了一次提交 ,會把值寫入資料庫,查詢出來為更新值。 多線程的話就不一定了,可能出現髒讀的現象。既然有提交的話,就得看線程的優先順序別了。如果優先順序別一樣的話,就得看運氣咯。 總而言之 如果更新提交後,另外一個線程才執行查詢的話,肯定會查處更新後的值。如果只執行到更新,另一個線程執行了查詢的話,就會出現髒讀
 
資料庫基礎 事件的隔離性層級

這個應該和不同資料庫以及各自不同的鎖層級設定有關係。沒有相關資訊,沒法給出具體結果。
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.