1.髒讀:
髒讀就是指當乙個事務正在訪問資料並且對資料進行了修改,但是還沒有提交時,另乙個事務讀取到了修改之後的資料,但是前面的事務進行回滾了,此時就出現了髒讀。2.不可重複讀:
乙個事務在查詢資料時另乙個修改資料的事務剛好提交,再次查詢時,兩次查詢結果不一樣。(即不能讀到相同的資料內容)3.幻讀:例如,乙個編輯人員兩次讀取同一文件,但在兩次讀取之間,作者重寫了該文件。當編輯人員第二次讀取文件時,文件已更改。原始讀取不可重複。如果只有在作者全部完成編寫後編輯人員才可以讀取文件,則可以避免該問題。
在乙個事務的兩次查詢中資料筆數不一致,例如:乙個事務查詢一次資料,在此時另乙個事務插入了幾條資料,當再次查詢時出現了幾條之前沒有的資料,產生幻讀;4. serializable 序列化:例如,乙個編輯人員更改作者提交的文件,但當生產部門將其更改內容合併到該文件的主複本時,發現作者已將未編輯的新材料新增到該文件中。如果在編輯人員和生產部門完成對原始文件的處理之前,任何人都不能將新材料新增到文件中,則可以避免該問題。
serializable 是最高的事務隔離級別,同時代價也花費最高,效能很低,一般很少使用,在該級別下,事務順序執行,不僅可以避免髒讀、不可重複讀,還避免了幻像讀。
1、原子性(atomicity):事務開始後所有操作,要麼全部做完,要麼全部不做,不可能停滯在中間環節。事務執行過程**錯,會回滾到事務開始前的狀態,所有的操作就像沒有發生一樣。也就是說事務是乙個不可分割的整體,就像化學中學過的原子,是物質構成的基本單位。
2、一致性(consistency):事務開始前和結束後,資料庫的完整性約束沒有被破壞 。比如a向b轉賬,不可能a扣了錢,b卻沒收到。
3、隔離性(isolation):同一時間,只允許乙個事務請求同一資料,不同的事務之間彼此沒有任何干擾。比如a正在從一張銀行卡中取錢,在a取錢的過程結束前,b不能向這張卡轉賬。
4、永續性(durability):事務完成後,事務對資料庫的所有更新將被儲存到資料庫,不能回滾。
資料庫事務的隔離級別有4個,由低到高依次為read uncommitted 、read committed 、repeatable read 、serializable ,這四個級別可以逐個解決髒讀 、不可重複讀 、幻讀 這幾類問題。
√: 可能出現 ×: 不會出現
事務隔離級別
髒讀不可重複讀
幻讀讀未提交(read-uncommitted)√√
√讀已提交(read-committed)×√
√可重複讀(repeatable-read)××
√序列化(serializable)××
×mysql預設的事務隔離級別為repeatable-read
mysql [mytest]
>
select @@tx_isolation;
+-----------------+
| @@tx_isolation |
+-----------------+
| repeatable-read |
+-----------------+
1 row in
set(0.00 sec)
1、事務隔離級別為讀提交時,寫資料只會鎖住相應的行
2、事務隔離級別為可重複讀時,如果檢索條件有索引(包括主鍵索引)的時候,預設加鎖方式是next-key 鎖;如果檢索條件沒有索引,更新資料時會鎖住整張表。乙個間隙被事務加了鎖,其他事務是不能在這個間隙插入記錄的,這樣可以防止幻讀。
3、事務隔離級別為序列化時,讀寫資料都會鎖住整張表
4、隔離級別越高,越能保證資料的完整性和一致性,但是對併發效能的影響也越大。
mysql的事務以及隔離級別
實際專案中的事務 題外話事務是最小的不可分割的工作單元,事務能保證乙個業務的完整性 執行乙個事務時,事務中只要有乙個操作失敗,整個事務就會失敗 銀行轉賬系統,先扣費再轉賬,如果扣費成功了,但是轉賬失敗了,假如扣費是乙個事務,轉賬為乙個事務,就會導致程式扣費成功了,但是沒有轉賬成功,這樣會造成要取錢的...
mysql隔離級別 MySQL 事務隔離級別
mysql innodb所提供的事務滿足acid的要求,事務是通過事務日誌中的redo log和undo log來實現原子性 undo log 一致性 undo log 永續性 redo log 事務通過鎖機制實現隔離性。1 事務隔離級別與實現read uncommitted 讀未提交 read c...
MySQL事務隔離級別
sql標準定義了4類隔離級別,包括了一些具體規則,用來限定事務內外的哪些改變是可見的,哪些是不可見的。低階別的隔離級一般支援更高的 併發處理,並擁有更低的系統開銷。read uncommitted 讀取未提交內容 在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,...