行鎖是如何加上的?
當前讀和快照讀:
cru加了排他鎖。
--------------------------------------------------------------------------------------------------
聚集索引:
主鍵索引:
---------------------------
隔離級別詳解。
髒讀 可重複讀 幻讀
讀提交:RC
可重複讀:RR
------------------
加鎖的分類:
具體的看文檔即可。
聚集索引/聚簇索引:
主鍵索引 (InnoDB必須有),葉子節點的名稱是主鍵,值是一行數據
次要(第二/輔助)索引,葉子節點的名稱是索引列的名稱,葉子節點的值是主鍵。
回表。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
組合1:id是主鍵 ,讀提交
id是主鍵時,此SQL只需要在id=10這條記錄上加X鎖即可。只能讀歷史版本,不可能產生讀 未提交的事情。
組合2:id是二級的唯一索引,讀提交
一個知識點:快照讀讀的是可見的版本,當前讀讀的是最新的版本。
這個組合現在看不懂了,看下極客時間:https://time.geekbang.org/column/article/68963
可重複讀就是在事務期間看到的是一樣的。
讀提交就是隻有對方提交了我才能看到,否則就是快照讀。
組合3:id是二級非唯一索引,讀提交
看下非唯一索引
上面那個表格:第一行就是非主鍵不唯一id列的所有的值,第二行是主鍵的值。
下面那個表格:第一行是主鍵的值,第二行是主鍵這一行的所有值。
此時加鎖加的是多條記錄。
出現幻讀:
不可以髒讀但是可以幻讀的。
MVCC的什麼特徵:讀不加鎖,讀寫互不影響。
組合4:沒有索引,讀提交
因爲是刪除的操作,走全表掃描,全表都會加排他鎖的。但是加鎖不符合條件的立馬就放開鎖。
----------------------------------------------------------------------------------------------------------------------------------------------------
RR級別的。
組合7:id是二級的非唯一索引,可重複讀的隔離級別。
這裏的間隙指的是:6-10 10-10 10-11
不只是在兩個10上加x鎖,還要在間隙上加鎖。
組合8:
很可怕的。
-------------------------------------------------------------------------------------------------------------------------------------------------
下半節課
--------------------------------------------------------------------------------------------------------------------------------------------------
最左前綴:最左邊的字段必須要加入到索引中,否則就走的是全表掃描。
知識點:組合索引的前面的字段如果使用的是範圍搜索,那麼在它後面的字段不會在搜索中使用到的。
知識點:整個where條件中如果有多個字段有索引,那麼只會選擇一個索引使用。
--------------------------------------------------------------------------------------------------------------------------------------------------------------
死鎖情況1:
死鎖情況2:
加鎖的話查出來就解開了?
--------------------------------------------------------------------------------------------------------------------------
B+tree。
組合索引是最有效的節省空間的。
總結:什麼是幻讀,就是一個事務同時產生了兩次的當前讀,但是結果是不一樣的。
在讀的期間加鎖了,就不能插入了,在這個範圍內。