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的執行。