1)髒讀:事務a讀取了事務b更新的資料,然後事務b回滾,那麼事務a讀取到的資料就是髒資料
2)不可重複讀:事務a多次讀取同一資料,事務b在事務a多次讀取的過程中對資料做了更新並提交,導致事務a多次讀取同一資料的結果不一致,側重於修改
3)幻讀: 系統管理員a將資料庫中所有的學生的成績從具體分數改為abcd等級,同時系統管理員b插入了或刪除了一條具體分數的記錄,導致a發現結束後還有一條資料沒有改過來或是丟失了,就好像出現了幻覺一樣
sessiona:
1)設定隔離級別read-uncommited
2)開啟事務 start transaction
3) 查詢
sessionb:
1) 設定隔離級別read-uncommited
2) 開啟事務 start transaction
3) update
session a:
4)再次查詢
發現sessiona 讀取到了 sessionb中的更改,出現了髒讀
sessiona:
1)設定隔離級別read commited
2)開啟事務 start transaction
3) 查詢
select * from account;
select @@tx_isolation;
setsession
transaction
isolation
level
read committed;
select * from account;
3) 查詢
sessionb:
1) 設定隔離級別read-commited
2) 開啟事務 start transaction
3) update
4) commit
set
session
transaction
isolation
level
read committed;
start
transaction;
update account set balance = balance -50
where id =1
select * from account;
sessiona:
5) 查詢,
不能讀取sessionb 未能commit 的改動,但是能讀取到sessionb中已經commit的改動
sessiona:
1)設定隔離級別repeatable read
2)開啟事務 start transaction
3) 查詢
sessionb:
1)設定隔離級別repeatable read
2)開啟事務 start transaction
3) insert or update
4) commit
sessiona:
4) 再次查詢,又再次查詢……多次查詢, 發現不能讀取sessionb已經提交的改動,實現了可重複讀
5) commit;
6) 再次查詢(注意是commit後查詢),發現可以讀取sessionb已經提交的改動, 但是4)和該步驟 的查詢結果不一樣, 出現了幻讀
sessiona:
1)設定隔離級別serializable
2)開啟事務 start transaction
3) 查詢
sessionb:
1)設定隔離級別serializable
2)開啟事務 start transaction
3) 查詢,可以查詢到,但比較慢
4)insert or update ,經過漫長等待後,發現insert or update 均沒有成功
sessiona:
4)commit;
sessionb:
5)insert or update
6) 查詢 ,發現insert or update 成功了!!!
補充:1、sql規範所規定的標準,不同的資料庫具體的實現可能會有些差異
2、mysql中預設事務隔離級別是可重複讀時並不會鎖住讀取到的行
3、事務隔離級別為讀提交時,寫資料只會鎖住相應的行
4、事務隔離級別為可重複讀時,如果有索引(包括主鍵索引)的時候,以索引列為條件更新資料,會存在間隙鎖間隙鎖、行鎖、下一鍵鎖的問題,從而鎖住一些行;如果沒有索引,更新資料時會鎖住整張表。
5、事務隔離級別為序列化時,讀寫資料都會鎖住整張表
6、隔離級別越高,越能保證資料的完整性和一致性,但是對併發效能的影響也越大,魚和熊掌不可兼得啊。對於多數應用程式,可以優先考慮把資料庫系統的隔離級別設為read committed,它能夠避免髒讀取,而且具有較好的併發效能。儘管它會導致不可重複讀、幻讀這些併發問題,在可能出現這類問題的個別場合,可以由應用程式採用悲觀鎖或樂觀鎖來控制。
事務的併發問題
1 髒讀 事務a讀取了事務b更新的資料,然後b回滾操作,那麼a讀取到的資料是髒資料 2 不可重複讀 事務 a 多次讀取同一資料,事務 b 在事務a多次讀取的過程中,對資料作了更新並提交,導致事務a多次讀取同一資料時,結果 不一致。3 幻讀 系統管理員a將資料庫中所有學生的成績從具體分數改為abcde...
Mysql事務,併發問題,鎖機制
1 什麼是事務 事務是一條或多條資料庫操作語句的組合,具備acid,4個特點。原子性 要不全部成功,要不全部撤銷 隔離性 事務之間相互獨立,互不干擾 一致性 資料庫正確地改變狀態後,資料庫的一致性約束沒有被破壞 永續性 事務的提交結果,將持久儲存在資料庫中 2 事務併發會產生什麼問題 1 第一類丟失...
事務 二 事務的併發問題
事務是併發操作的基本單位,保證事務acdi特性是事務處理的重要任務,而事務acdi特性遭到破壞的乙個直接原因就是是多個事務對資料庫 共享資源 的併發操作引起的,為了保證事務的隔離性與一致性。dbms必須對事物進行合理正確的排程。由於事物的併發操作可能導致事務之間進行交織操作,可能會出現資料不一致的問...