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