锁冲突和死锁

锁介绍
     InnoDB支持行级锁和表级锁,默认为行级锁,锁共有表级锁、行级锁、页面锁 
死锁介绍
      锁冲突和死锁不是一个概念,锁冲突会按顺序执行,死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,
  若无外力作用,它们都将无法推进下去。
       表级锁:开销小,加锁快;行级锁:开销大,加锁慢,表级锁不会产生死锁.所以解决死锁主要还是针对于最常用的InnoDB.
  在MySQL中,行级锁并不是直接锁记录,而是锁索引。索引分为主键索引和非主键索引两种,如果一条sql语句操作了主键索引,
  MySQL就会锁定这条主键索引;如果一条语句操作了非主键索引,MySQL会先锁定该非主键索引,再锁定相关的主键索引,当两种
  情况交叉就会出现死锁;在UPDATE、DELETE操作时,MySQL不仅锁定WHERE条件扫描过的所有索引记录,而且会锁定相邻的键值,
  即所谓的next-key locking这也是行锁加锁慢的原因。SELECT时只有只读锁,但是update..select时会变成写锁.
一般情况
  1 update..select某个只有主键的表时,会锁定整个表,解决方案是为where 条件后面的字段增加索引
  2 update..select 非主键与update where 主键时可能出现上面定义的死锁,解决方案是update..select 先select后update

http://www.oracle.com/technetwork/java/javase/downloads/index.html
原文地址:https://www.cnblogs.com/ai464068163/p/2826474.html