MySQL的表锁、行锁及事务处理的机制

一、常见MySQL引擎对锁的支持

MyISAM:不支持事务,仅实现表锁。

InnoDB:支持事务,实现表锁和行锁。对于UPDATE、DELETE和INSERT语句,InnoDB会自动给涉及的数据集加排它锁;而对于普通SELECT语句,InnoDB不会加任何锁,当然我们也可以显示的为SELECT加锁,如select * from tableName where ...  for update。

表锁虽然开销小,锁表快,但高并发下性能低。

行锁虽然开销大,锁表慢,但高并发下相比之下性能更高。

事务和行锁,都是在确保数据准确的基础上,提高并发的处理能力。

多个事务(包括行锁)操作同一行数据时,后来的事务处于阻塞等待状态,这样可以避免了脏读等数据一致性的问题。后来的事务(包括行锁)可以操作其他行数据,解决了表锁高并发性能低的问题。

 

二、InnoDB行锁的内部机制

InnoDB的行锁,是针对索引加的锁,不是针对记录加的锁。行锁的内部机制为:

(1)当使用索引列条件时的修改,即update ... where index_column 时,加行锁,否则升级为加表锁。

(2)当更新一张较大表的大部分甚至全部的数据时,即使将索引作为检索条件,MySQL仍会将行锁升级为表锁。

 

三、事务的特点

 

 


参考:http://www.sohu.com/a/217011111_99908665

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值