關於mySQL鎖機制的個人理解
學習和使用Mysql數據庫有段時間了,針對自己對MySQL數據庫中的鎖機制談一下自己的理解。如有錯誤歡迎大家指正;
一、按照類型分:
1、讀鎖(可以理解為共享鎖),當A事物對一張表加上該鎖則意味著該事物只能對其進行讀操作,不能寫,同時不能對其他表進行操作,但是並不會阻塞其他事物對該表的讀請求。
2、寫鎖(可以理解為排他鎖),當A事物對一張表加上該鎖則意味著該事物只能對其進行操作(既可以讀也可以寫),不能對其它表進行操作,但是會阻塞其他事物對該表的讀寫請求。
二、按照鎖的影響範圍分:
1、表級鎖:在MySQL中執行引擎MYISAM是為表級鎖不支持事物,所以在是使用MYISAM執行引擎對表進行讀操作時就會默認為該表添加讀鎖,同理在寫操作時會自動為表添加寫鎖,至於對其他事物的影響請看上文。
2、行級鎖:在MySQL中執行引擎INNODB默認為行級鎖,註意該鎖是基於索引的,當索引失效時則會自動升級為表級鎖,在使用INNODB作為執行引擎時在多某一條數據寫操作時會自動為其添加寫鎖(排他鎖),所以會阻塞其他事物對該行數據的讀寫操作,當事物提交或者回滾之後會將該寫鎖自動釋放,
間隙鎖:該種鎖是行級鎖的一種特殊情況,例如當更新數據時,更新的條件為where id>1 and id <4;那麽數據庫則會為id = 2,3;這倆條數據添加寫鎖,這就是間隙鎖。
悲觀鎖:該鎖其實就是一種顯示添加寫多的別稱,在執行查詢語句時顯示的添加排他鎖阻塞其他事物對數據的操作就是為悲觀鎖;
樂觀鎖:該鎖並不屬於數據庫機制的一種,個人理解這種鎖機制是采用CAS無鎖思想從而產生的一種鎖機制,是為數據庫表結構添加一列(一般情況是版本號,然後在對該表數據進行操作時通過該版本號的改變和數據庫DDL語句的影響數據行數來判斷數據庫是否安全的一種鎖機制。
3、頁鎖:小生才疏學淺,目前還沒有用到過該類型的鎖,歡迎大家補充。
==如有錯誤歡迎大家指正,本人為java程序員希望結交更多的同行朋友,共同進步。
關於mySQL鎖機制的個人理解