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...