读锁git
写锁github
查看表锁的争用状况sql
show status like 'table%';
复制代码
Table_locks_immediate:产生表级锁定的次数;bash
Table_locks_waited:出现表级锁定争用而发生等待的次数;优化
select * from table_name where ... lock in share mode;
spa
select * from table_name where ... for update;
.net
Innodb行锁是经过给索引项加锁
来实现的,只有经过索引条件
检索数据,Innodb才使用行级锁,不然,InnoDB将使用表锁。日志
当咱们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,Innodb会给符合条件的已有数据记录的索引项加锁,对于键值在条件范围内但并不存在的记录,Innodb也会对这个“间隙”加锁,这种锁机制就是所谓的间隙锁。code
锁定记录的同时会锁记录cdn
意向共享锁(IS)
意向排他锁(IX)
意向锁的做用就是协调行锁和表锁之间的关系的,是将行锁从另外一个角度提升到了表锁的等级(伪表锁),与表锁进行判断。
SQL1:select * from t1 where id = 1;
SQL2:delete from t1 where id = 1;
show engine innodb status;
深刻理解业务,了解整个事务的处理逻辑。
GAP锁很复杂,为了减小GAP锁致使的死锁,尽可能选择RC隔离级别。
适当的减小Unique索引,能够减小GAP锁致使的死锁。
以不一样的索引过滤条件,来操作相同的记录,很容易产生死锁。
参考文章