MySql(九): 锁

本文深入探讨了MySQL中的锁机制,包括读锁(共享锁)与写锁(排它锁)的概念及其差异。详细阐述了读操作和写操作在不同情况下的加锁行为,如SELECT的读锁方式(lock in share mode和for update)。此外,还讲解了行锁和表锁的区别,以及如何通过特定SQL查看锁情况。重点讨论了在不同隔离级别下(如read committed和repeatable read)的间隙锁(GAP锁)行为,以及其在防止幻读问题中的作用。最后提到了表锁的使用,如lock tables命令,并建议尽量使用行级锁以提高性能。
摘要由CSDN通过智能技术生成

读锁与写锁:

读锁:共享锁、Shared Locks、S锁。加上读锁后,其他事务不能更新该数据,只允许读取该锁数据。

写锁:排它锁、Exclusive Locks、X锁。加上写锁后,其他事务不能更新也不能加读锁。

select:select操作是不加锁,所以一条数据加上写锁后,仍能通过普通select去查询,不会涉及锁的冲突。

 

一个资源能加多个读锁,但是只能加一把写锁。

 

X锁

S锁

X锁

冲突(阻塞)

冲突(阻塞)

S锁

冲突(阻塞)

不冲突

 

读操作:

对于普通SELECT语句,InnoDB不会加任何锁,但select可以显示的加读锁和写锁。

读锁:select ... lock in share mode

将查找到的数据加上一个S锁,允许其他事务继续获取这些记录的S锁,不能获取这些记录的X锁(会阻塞)。

写锁:select ... for update

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值