1. 程式人生 > >數據庫的隔離級別對應的就就是數據庫中的鎖

數據庫的隔離級別對應的就就是數據庫中的鎖

str 行修改 隔離 locks 復讀 serializa 獲得 出錯 tab

------------------------------------------------------ 數據庫中的幾種隔離級別

read uncommited--讀未提交 該隔離級別指即使一個事務的更新語句沒有提交,但是別的事務可以讀到這個改變,幾種異常情況都可能出現。極易出錯,沒有安全性可言,基本不會使用。 read committed --讀已提交 該隔離級別指一個事務只能看到其他事務的已經提交的更新,看不到未提交的更新,消除了臟讀和第一類丟失更新,這是大多數數據庫的默認隔離級別,如Oracle,Sqlserver。

repeatable read --可重復讀 該隔離級別指一個事務中進行兩次或多次同樣的對於數據內容的查詢,得到的結果是一樣的,但不保證對於數據條數的查詢是一樣的,只要存在讀改行數據就禁止寫,消除了不可重復讀和第二類更新丟失,這是Mysql數據庫的默認隔離級別。

serializable --序列化讀 意思是說這個事務執行的時候不允許別的事務並發寫操作的執行.完全串行化的讀,只要存在讀就禁止寫,但可以同時讀,消除了幻讀。這是事務隔離的最高級別,雖然最安全最省心,但是效率太低,一般不會用。

------------------------------------------------------------------------------------------------ 數據庫中的鎖:

1.共享鎖(Share locks簡記為S鎖):也稱讀鎖,事務A對對象T加s鎖,其他事務也只能對T加S,多個事務可以同時讀,但不能有寫操作,直到A釋放S鎖。

2.排它鎖(Exclusivelocks簡記為X鎖):也稱寫鎖,事務A對對象T加X鎖以後,其他事務不能對T加任何鎖,只有事務A可以讀寫對象T直到A釋放X鎖。

3.更新鎖(簡記為U鎖):用來預定要對此對象施加X鎖,它允許其他事務讀,但不允許再施加U鎖或X鎖;當被讀取的對象將要被更新時,則升級為X鎖,主要是用來防止死鎖的。因為使用共享鎖時,修改數據的操作分為兩步,首先獲得一個共享鎖,讀取數據,然後將共享鎖升級為排它鎖,然後再執行修改操作。這樣如果同時有兩個或多個事務同時對一個對象申請了共享鎖,在修改數據的時候,這些事務都要將共享鎖升級為排它鎖。這些事務都不會釋放共享鎖而是一直等待對方釋放,這樣就造成了死鎖。如果一個數據在修改前直接申請更新鎖,在數據修改的時候再升級為排它鎖,就可以避免死鎖。

數據庫的隔離級別對應的就就是數據庫中的鎖