文章目录
mysql锁的使用建议
能不加锁就不加锁
除非必须,查询时不要加锁
。 MySQL的MVCC
可以实现事务中的查询不用加锁,优化事务性能;
尽量使用较低的隔离级别;
不要申请超过实际需要的锁级别
,能用读锁就不要写锁。
精心设计索引, 并尽量使用索引访问数据, 使加锁更精确, 从而减少锁冲突的机会
选择合理的事务大小,小事务
发生锁冲突的几率也更小
给记录集显示加锁时,最好一次性请求足够级别的锁。比如要修改数据的话,最好直接申请排他锁
,而不是先申请共享锁,修改时再请求排他锁,这样容易产生死锁
不同的程序访问一组表时,应尽量约定以相同的顺序访问各表,对一个表而言,尽可能以固定的顺序
存取表中的行。这样可以大大减少死锁的机会。
尽量用相等条件
访问数据,这样可以避免间隙锁
对并发插入的影响
共享锁和独占锁
共享锁,英文名:Shared Locks,简称S锁。在事务要读取一条记录时,需要先获取该记录的S锁。
独占锁,也常称排他锁,英文名:Exclusive Locks,简称X锁。在事务要改动一条记录时,需要先获取该记录的X锁。
假如事务T1首先获取了一条记录的S锁之后,事务T2接着也要访问这条记录:<