關於事務隔離級別

第一種 read uncommitted 此狀態下髒讀,不可重複讀,虛讀都有可能發生。此狀態下兩我的同時操做一個數據庫表一邊開啓事務沒有提交,另外一邊也開啓事物開始更改數據可是也沒有提交,此時第一個操做數據庫的人在沒有提交的狀況下會看到另外一邊沒有提交的數據,此時若第二我的不提交直接rollback數據回滾就會使數據變回原來的,這就是髒讀。舉例說用這種方式轉帳就很不安全,第一我的沒有關閉事物就去查詢帳戶發現錢多了,可是轉帳的人並無提交,此時轉帳的人若是採用數據回滾就會使原本轉好的錢回來。數據庫

第二種 read committed 此狀態下避免了髒讀,可是不可重複讀,虛讀都有可能發生。補充一點,這種事務隔離級別是oracle默認的。避免不可重複讀,顧名思義,就是爲了使第一我的在沒有提交事物以前讀取到的數據不可變,第二我的不管事物提沒提交事物只要第一我的沒有提交數據,那麼第一我的查詢到的數據都不會改變。安全

第三種是 repeatable read 此狀態下避免了髒讀,不可重複讀,可是虛讀是有可能發生。這種事物隔離級別是MySQL默認的,插入和修改數據只有在第一我的提交以後才能夠查到,避免了數據的變更。oracle

第四種是 serializable 此狀態下避免了全部得問題可是效率下降了,一我的操做數據庫的時候別人是沒法修改的。spa

總結:線程

l  髒讀:指一個線程中的事務讀取到了另一個線程中未提交的數據。事務

l  不可重複讀:指一個線程中的事務讀取到了另一個線程中提交的update的數據。it

l  虛讀:指一個線程中的事務讀取到了另一個線程中提交的insert的數據table

相關文章
相關標籤/搜索