innodb中不同语句设置不同锁类型

  在锁读的过程中,一个update 或一个delete 经常设置记录锁在每一个索引记录上。这与where条件中是否排除此条索引记录没有关系。innodb认不出扩展的where扩展条件,只会认出那些索引区间被扫描。The locks are normally next-key locks that also block inserts into the gap immediately before the record。通常,gap locking不能显示使用,导致next-key locking 也不能用。大多数情况下,事务隔离级别也会影响lock的设置。

 如果一个二级索引在查找记录过程中使用,那么索引记录被设置x-lock。如果没有满足的索引,那么将是全表扫描,表中每一条记录都会比锁定。并发降低,效率下降,创建好的索引会扫描不必要的记录。

select ..... for update or select .... lock in share mode 下,扫描记录 请求locks。

innodb 设定的特定锁类型

  select ......from 锁定读,读取数据库快照而不用设置locks。在serializable level,在索引记录将设置 next-key locks

 select .... from ...lock in share mode 在全部的索引记录上设置一个共享的next-key locks,只有扫描是唯一索引时设置record lock。

 select.... from .... for update 在全部的索引记录上设置一个排他的next-key locks,只有扫描是唯一索引时设置索引记录锁。

update.....where ....设置排他的next-key lock。但是只有扫描唯一索引记录时设定索引记录锁

delete......where.... 设置排他的next-key lock。但是只有扫描唯一索引记录时设定索引记录锁

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值