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

 

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