InnoDB行鎖是通過給索引上的索引項加鎖來實現!

1、數據表結構如下:只有一個主鍵索引(ID)


 

2、先在客戶端A執行下面的更新語句

START TRANSACTION;
UPDATE zx_news_dtl t set t.sweb_desc='CSDN'  where t.ssource_name='CSDN';

3、再在客戶端B執行以下的更新語句

UPDATE zx_news_dtl t set t.sauthor='liqin2233' where t.id='1174576125793153026';

當在執行B語句時,會一直處於執行狀態,這是爲什麼了????

這裏就要看MySql InnoDB行鎖的加鎖機制了:
1、INNODB表是索引組織的表,主鍵是聚集索引,非主鍵索引都包含主鍵信息。
2、INNODB默認是行鎖。
3、INNODB行鎖是通過給索引項加鎖來實現的,即只有通過索引條件檢索數據,InnoDB才使用行級鎖,否則將使用表鎖。

因爲A的語句是用ssource_name爲條件,在字段沒有創建索引,所以執行A語句時,實時是做了表鎖,從而阻塞B的執行。

 

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