mysql鎖相關知識點總結

2021-10-07 18:13:00 字數 1953 閱讀 4136

1.mysql server分為3層:服務層、核心層(查詢快取、分析器、優化器、執行器)、儲存層。mysql在5.5之前預設使用myisam儲存引擎,之後使用innodb

1.mysql事務包含四個特性,號稱acid四大天王。

原子性(atomicity):語句要麼全執行,要麼全不執行,是事務最核心的特性,事務本身就是以原子性來定義的;實現主要基於undo log日誌實現的。

永續性(durability:保證事務提交後不會因為宕機等原因導致資料丟失;實現主要基於redo log日誌。

隔離性(isolation):保證事務執行盡可能不受其他事務影響;innodb預設的隔離級別是rr,rr的實現主要基於鎖機制、資料的隱藏列、undo log和類next-key lock機制。

一致性(consistency):事務追求的最終目標,一致性的實現既需要資料庫層面的保障,也需要應用層面的保障。

2.隔離級別

select @@tx_isolation;

select @@transaction_isolation;

隔離級別

髒讀不可重複讀

幻讀read uncommitted(讀未提交)

可能可能

可能read committed(讀已提交)

不可能可能

可能repeatable read(可重複讀)

不可能不可能

可能serializable(序列化)

不可能不可能

不可能mvvc (多版本併發控制) 的方式,一行實際上會有多個trx_id不同(插入版本號和刪除版本號)的記錄

對於乙個快照來說,它能夠讀到那些版本資料,要遵循以下規則:

1、當前事務內的更新,可以讀到;

2、版本未提交,不能讀到;

3、版本已提交,但是卻在快照建立後提交的,不能讀到;

4、版本已提交,且是在快照建立前提交的,可以讀到;

利用上面的規則,再返回去套用到讀提交和可重複讀的那讀已提交和可重複讀,兩者主要的區別就是在快照的建立上,可重複讀僅在事務開始是建立一次,而讀提交每次執行語句的時候都要重新建立一次。

2.autocommit

①無論為on還是off,都會在執行sql語句時自動開啟事務;②為on時,執行sql後會自動提交(除非使用begin顯式開啟了乙個事務);③為off時,需要使用者手動提交

3.innodb行鎖是通過給索引上的索引項加鎖來實現的。只有通過索引條件檢索資料,innodb才使用行級鎖,否則,innodb將使用表鎖。

只要事務 未commit 或者 未rollback,會一直持有對索引項和行記錄的鎖

4.觸發加鎖的操作

①排他鎖:insert、update、delete、select * for update

②共享鎖:select * lock in share mode

5.檢視sql語句的執行計畫

explain select ******;

結果中最關鍵的兩列:

①type,效能從好到差排序如下,system(一般不會出現) > const(主鍵or唯一索引精確匹配) > eq_ref(主鍵or唯一索引精確匹配) > ref(非唯一索引精確匹配) > range(索引範圍查詢) > index(全遍歷索引樹) > all(全遍歷資料表)

②key,就是這次查詢使用的索引

如果需要干預最終選擇使用的索引,可以加上force index(索引名)子句

7.行鎖的分類

記錄鎖(record lock)、間隙鎖(gap lock)、臨鍵鎖(next-key lock)

9.mysql 8.0新特性 – nowait以及skip locked

10.元資料鎖(mdl)

mdl不需要主動加鎖,每當我們訪問乙個資料表的時候,會自動被加上,作用是防止在我們進行表的操作的時候,進行了表結構的變更。在5.5這個版本中被引入了mysql中:

當對乙個表進行增刪改查的時候,加mdl的讀鎖

當進行乙個表的結構變更的時候,加mdl的寫鎖

Mysql相關知識點

1 對於mysql表中有乙個時間字段,要根據時間字段計算,在某一時間段中,該表中的所有記錄。例子如下 在t druid info表中,ctime是時間字段,查詢t druid info表中,七月份接入的,並且執行著的任務總數,sql語句如下 select count from t druid inf...

MySQL知識點 總結

1 truncate和delete trop之間有什麼區別?truncate table 在功能上與不帶 where 子句的 delete 語句相同 二者均刪除表中的全部行。但 truncate table 比 delete 速度快,且使用的系統和事務日誌資源少。delete 語句每次刪除一行,並在...

mysql知識點總結

一 mysql基礎 1 mysql儲存結構 資料庫 表 資料 sql語句 2 管理資料庫 增加 create database 資料庫 default character utf8 刪除 drop database 資料庫 修改 alter database 資料庫 default characte...