資料庫的四種隔離級別與七種傳播屬性

2021-09-17 23:34:35 字數 961 閱讀 4559

mysql的兩種儲存引擎:innodb,myisam

innodb

myisam

事務支援acid的事務,四種事務級別

不支援事務,但是每次查詢都是原子的

鎖支援表鎖,預設行鎖

表鎖是否儲存總行數

不儲存表的總行數

儲存表的總行數

索引採用聚集索引

採用非聚集索引

表儲存乙個innodb表儲存在乙個檔案內,也可能為多個

索引檔案、表結構檔案、資料檔案

備註:nnodb在不使用索引項查詢時,也是鎖整張表

資料庫鎖的劃分:

併發事務引發的問題

1.更新丟失(a事務回滾造成了b事務的更新無效) 

解決的級別:innodb所有級別都解決了這個問題 ,資料庫最低級別read-uncommitted

2.髒讀(b事務讀到了a事務的未提交的更新資料)

解決的級別:read-committed解決了這個問題,使b事務讀取的是a事務的已提交資料

3.不可重複讀(a事務在b事務多次讀取資料過程中,更改提交了資料,導致b事務兩次讀取的資料不一致)

解決的級別:repeatable-read,使b事務忽略a事務對資料的修改提交,讀取的是b事務開啟時的那份資料(快照)。 但是,僅限於讀取,最終修改的資料還是基於a事務提交的資料進行修改(當前讀 )。

4.幻讀(a事務讀取到3條資料後,b事務增加(或刪除)1條資料並提交,導致a事務再修改時資料增加了一條之前並沒有查詢到的資料)   

解決的級別:serializable,使事務之間必須序列執行。serializable為資料庫最高隔離級別。

事務傳播屬性:

資料庫四種隔離級別

存在的問題 更新遺失。解決辦法就是下面的 可讀取未確認 寫事務阻止其他寫事務,避免了更新遺失。但是沒有阻止其他讀事務。存在的問題 髒讀。即讀取到不正確的資料,因為另乙個事務可能還沒提交最終資料,這個讀事務就讀取了中途的資料,這個資料可能是不正確的。解決辦法就是下面的 可讀取確認 寫事務會阻止其他讀寫...

資料庫四種隔離級別

零 沒有併發控制 存在的問題 更新遺失。解決辦法就是下面的 可讀取未確認 一 可讀取未確認 read uncommitted 寫事務阻止其他寫事務,避免了更新遺失。但是沒有阻止其他讀事務。存在的問題 髒讀。即讀取到不正確的資料,因為另乙個事務可能還沒提交最終資料,這個讀事務就讀取了中途的資料,這個資...

資料庫的四種隔離級別

序列化 serializable,sqlite預設模式 最高端別的隔離。兩個同時發生的事務100 隔離,每個事務有自己的 世界 可重複讀 repeatable read,mysql預設模式 每個事務有自己的 世界 除了一種情況。如果乙個事務成功執行並且新增了新資料,這些資料對其他正在執行的事務是可見...