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預設模式 每個事務有自己的 世界 除了一種情況。如果乙個事務成功執行並且新增了新資料,這些資料對其他正在執行的事務是可見...