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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值