MySQL锁的总结

锁保证数据并发访问的一致性、有效性。锁是mysql在服务器层和存储引擎层的并发控制。

锁机制

共享锁与排他锁

  • 共享锁(读锁):其它事务可以读,但不能写
  • 排他锁(写锁):其它事务不能读,也不能写

锁粒度

mysql不同的存储引擎支持不同的锁机制,所有的存储引擎都以自己的方式显现锁机制。

  • MyISAM和MEMORY存储引擎采用表级锁(table-level locking)
  • BDB存储引擎采用的是页面锁(page-level locking),但也支持表级锁
  • InnoDB存储引擎支持行级锁(row-level locking),也支持表级锁,默认情况下采用行级锁

默认情况下,表锁和行锁都是自动获取,不需要额外的命令。

在有些情况下,用户需要明确地进行锁表或者进行事务的控制,以便确保整个事务的完整性,这样就需要使用事务控制和锁来完成。

不同粒度锁的比较

1、表级锁:开销小,加锁快,不会出现死锁,锁定粒度大,发生锁冲突的概率最高,并发读最低。

表级锁更适合以查询为主,并发用户少,只有少量按索引条件更新数据的应用

2、行级锁:开销大,加锁慢,会出现死锁,锁定粒度最小,发生锁冲突概率最低,并发读也最高。

最大程度支持并发,同时也带来最大的锁开销

行级锁只在存储引擎层实现,而mysql服务器层没有实现,行锁更适合有大量按索引条件并发更新少量不同数据,同时又有并发查询的应用

3、页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁粒度界于表锁和行锁之间,并发读一般。


参考:https://zhuanlan.zhihu.com/p/29150809

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值