我知道当两个或多个实体阻塞某些源时会发生死锁,而且它们都无法完成,因为它们是以循环方式阻塞源。
select语句是否会发生死锁。 select语句是否阻止资源。我相信插入或更新会阻止行,但不是非常肯定select语句。请指教。
答案 0 :(得分:1)
使用InnoDB存储引擎(默认值),读取是非阻塞的 - 因此两个选择不能相互阻塞。 InnoDB是一个使用MVCC(多版本并发控制)的版本控制引擎,这意味着事务(A)将在某个时刻获取感兴趣的记录的副本 - 如果它修改然后提交数据,那么在此之后开始的任何事务commit将看到新副本,但是在A开始之后但在A提交之前的任何事务开始(B)之前开始的事务将看到A看到的副本。只有在其中一个事务修改数据时才会发生死锁(在行级别的InnoDB中发生锁定)。
有关详细信息,请参阅here和here。对于MyISAM表(我对此知之甚少!),请查看此处的比较或仅查看Google" MyISAM vs InnoDB" (129,000次点击。