对mysql中锁的一些理解

本文详细介绍了MySQL中的锁机制,包括锁的使用建议、共享锁和独占锁、意向锁的概念,以及表锁、页面锁、行锁的区别。重点讲解了行锁中的记录锁、间隙锁和Next-Key锁,并讨论了解决死锁的方法以及如何应对脏读、不可重复读、幻读问题。文章强调了合理使用锁和索引的重要性,以降低锁冲突和提高并发性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql锁的使用建议

能不加锁就不加锁
除非必须,查询时不要加锁。 MySQL的MVCC可以实现事务中的查询不用加锁,优化事务性能;

尽量使用较低的隔离级别;

不要申请超过实际需要的锁级别,能用读锁就不要写锁。

精心设计索引, 并尽量使用索引访问数据, 使加锁更精确, 从而减少锁冲突的机会

选择合理的事务大小,小事务发生锁冲突的几率也更小

给记录集显示加锁时,最好一次性请求足够级别的锁。比如要修改数据的话,最好直接申请排他锁,而不是先申请共享锁,修改时再请求排他锁,这样容易产生死锁

不同的程序访问一组表时,应尽量约定以相同的顺序访问各表,对一个表而言,尽可能以固定的顺序存取表中的行。这样可以大大减少死锁的机会。

尽量用相等条件访问数据,这样可以避免间隙锁对并发插入的影响

共享锁和独占锁

共享锁,英文名:Shared Locks,简称S锁。在事务要读取一条记录时,需要先获取该记录的S锁。

独占锁,也常称排他锁,英文名:Exclusive Locks,简称X锁。在事务要改动一条记录时,需要先获取该记录的X锁。

假如事务T1首先获取了一条记录的S锁之后,事务T2接着也要访问这条记录:<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值