開課吧mysql--------------------03

分類:全局鎖表鎖行鎖。

表鎖的總結:

讀鎖:共享鎖。

寫鎖:排他鎖。

select是讀鎖。

crud是寫鎖。

在元數據鎖不是這麼認爲了:DML和DQL是讀鎖。DDL是寫鎖。

表鎖是在mysql的server層實現的。

------------------------------------------------------------------------------------------------------------

下面說行鎖:是存儲引擎層實現的。

行鎖也是兩種實現的:

MVCC:多版本的併發控制,通過對一條記錄記錄多個版本的方式,但是這樣的話讀是不加鎖的。讀不加鎖,讀寫不衝突。

知識點:行鎖其實是針對索引加鎖的。InnoDB存儲引擎,索引和數據都是存儲在一起的,索引建表。B+樹建表。加鎖是針對B+樹的葉子節點加鎖的。

LBCC:基於鎖的併發控制,隔離級別有關係的。隔離級別爲串行化的時候纔會有基於鎖的併發控制。讀加讀鎖,寫加寫鎖。

行鎖的基本演示:

InnoDB的表必須有主鍵,沒有的話會自動加。

b沒有加索引的話由行鎖升級爲表鎖。但是InnoDB會優化的,就是加鎖解鎖,加鎖解鎖......

---------------------------------------------------------------------------------------------------------------------------------------

事務是事務,鎖是鎖,不要弄混了。

重點:

下半節課:只有在InnoDB才支持事務。

在常用的存儲引擎中,只有InnoDB存儲引擎才支持事務。
執行DDL、DML、DCL語句時,事務默認是自動提交的
事務必須擁有四大特性:A(原子性:原子操作是不可分割的,在執行完畢不會被任何其它任務或事件中斷)、C(一致性)、I(隔離性)、D(持久性)
數據庫併發問題:
   髒讀:A事務未提交,但是B事務看到了A事務中未提交的數據。
   不可重複讀:針對同一條記錄的。事務A對該記錄,發生update操作時,事務B在事務A update操作前
後看到的該記錄是不一致的。
   幻讀:針對同一張表。事務A對該記錄,發生insert\delete操作時,事務B在事務A insert\delete操
作前後看到的記錄條數是不一致的。
      如何解決以上的問題呢?通過事務的隔離性(Isolation)來解決的,MySQL的隔離性有四種級別的,每一個
級別都會對應去解決以上的併發問題。
隔離級別由低到高,如下(高隔離級別,都會將低隔離能解決的問題解決掉):
Read UnCommited:讀未提交,什麼併發問題都解決不了。
Read Commited(RC):讀已提交,可以解決髒讀併發問題。
Repeatable Read(RR):可重複讀,可以解決髒讀、可重複讀,在InnoDB存儲引擎中,該隔離級別
就可以解決幻讀。

Serializable:串行化,可以解決髒讀、可重複讀、幻讀。它爲什麼可以解決所有問題,是因爲它對讀
和寫都加鎖,讀寫互相堵塞。這種方案是使用基於鎖的併發控制去解決的。
MySQL默認的隔離級別是RR(可重複度),Oracle默認的隔離級別是RC。
注意事項:隔離級別越高,越能保證數據的完整性和一致性,但是對併發性能的影響也越大。

-----------------------------------------------------------------------------------

間隙鎖:https://blog.csdn.net/zcl_love_wx/article/details/82382582

3.不需要關係。數據頁放在緩存中。

----------------------------------------------------------------------------------------------------------------------------------

索引:索引就是數據結構

爲什麼where的條件最好加索引?

索引就是一個B+ 樹數據結構。主要思考的就是減少IO操作次數。
hash
數組
二叉樹
多叉樹(B+ 樹)
B樹:所有節點都會存儲數據。
B+樹:只有葉子節點,纔會存儲數據。
索引可以加快數據庫的查詢速度。
索引一般都是存儲在磁盤中的,具體的存儲方式,由存儲引擎決定,比如MyISAM存儲引擎,會單獨使用一個
文件來存儲索引數據,而InnoDB存儲引擎,是將索引和表記錄都存儲在同一個文件中的。
其中:聚集索引、主鍵索引、次要索引、覆蓋索引、組合索引、前綴索引、唯一索引默認都是使用B+樹索引,
統稱索引。

幾層就是幾個IO。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章