2014 7 27 資料庫的隔離性

2021-09-07 11:37:57 字數 1684 閱讀 7077

演示不同隔離級別下的併發問題

1.當把事務的隔離級別設定為read uncommitted ,會引發髒讀。不可反覆讀。虛讀

a窗體set 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窗體set 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結束事務才幹插入

2014 7 27 資料庫的隔離性

演示不同隔離級別下的併發問題 1.當把事務的隔離級別設定為read uncommitted 會引發髒讀,不可重複讀,虛讀 a視窗set transaction isolation level read uncommitted start transaction select from account...

資料庫隔離性

事務的特性 原子性 一致性 隔離性 永續性 多事務同時執行的時候,可能會出現的問題 髒讀 不可重複讀 幻讀 事務隔離級別 讀未提交 讀提交 可重複讀 序列化 不同事務隔離級別的區別 讀未提交 乙個事務還未提交,它所做的變更就可以被別的事務看到 讀提交 乙個事務提交之後,它所做的變更才可以被別的事務看...

mysql Spring資料庫隔離級別與效能分析

這裡以mysql為例,先明確以下幾個問題 一.一般專案如果不自己配置事務的話,一般預設的是autocommit,即執行完乙個操作後自動commit,提交事務。注 事務是繫結在資料庫操作上的,也就是當程式執行 statement.excute等操作 轉而到資料庫層面上的時候,事務才開始發生 當然spr...