標籤:持久性 bsp mysql 事務 一個 層級 序列化 comm ali 分割
1.事務
邏輯上的一組操作,組成這組操作的各個邏輯單元要麼一起成功,要麼一起失敗.
2.事務特性
原子性:強調事務的不可分割.
一致性:強調的是事務的執行的前後,資料的完整性要保持一致.
隔離性:一個事務的執行不應該受到其他事務的幹擾.
持久性:事務一旦結束(提交/復原)資料就持久保持到了資料庫.
3.事務的安全性問題
髒讀 :一個事務讀到另一個事務還沒有提交的資料.
不可重複讀取:一個事務讀到了另一個事務已經提交的update的資料,導致在當前的事務中多次查詢結果不一致.
虛讀/幻讀:一個事務讀到另一個事務已經提交的insert的資料,導致在當前的事務中多次的查詢結果不一致.
4.事務的隔離等級
MYSQL隔離等級:repeatable read Oracle隔離等級:read committed
* read uncommitted
現象:未提交讀.髒讀,不可重複讀取,虛讀都可能發生.
原因:在讀取時是不會加鎖的,但在更新資料時,對其加行級共用鎖定(其它事務不能更改,但可以讀取,導致髒讀),事務結束時釋放。
* read committed
現象:已提交讀.避免髒讀.但是不可重複讀取和虛讀有可能發生.
原因:這種隔離等級表示讀取的資料是已提交成功的,解決了髒讀問題,解決方式是給寫資料加行級獨佔鎖定,這樣寫過程是無法讀取的,直到交易處理完畢才釋放獨佔鎖定,給讀的資料加行級共用鎖定,這樣讀的時候也是無法寫的,但是一旦讀完該行就釋放共用鎖定。這種模式下雖然處理了髒讀,但是並沒有處理丟失更新和不可重複讀取的問題.
* repeatable read
現象:重複讀.避免髒讀,不可重複讀取.但是虛讀有可能發生.
原因:在這種隔離等級下可以重複的讀取資料了,顧名思義,解決了不可重複讀取的問題,同時也解決了更新丟失的問題。解決辦法:給寫的資料加行級獨佔鎖定,事務結束釋放,給讀的資料加行級共用鎖定,事務結束後釋放。這種模式還是沒有處理幻讀的問題
* serializable
現象:序列化的.避免髒讀,不可重複讀取,虛讀的發生.
原因:事務讀資料則加表級共用鎖定,事務寫資料則加表級獨佔鎖定,幻讀問題也得到瞭解決
5.解決
隔離等級 產生問題
read uncommitted
髒讀
read committed
髒讀不可重複讀取
repeatable read
不可重複讀取
serializable
虛讀/幻讀
mysql 事務學習