select语句导致数据库死锁

时间:2015-02-05 04:01:46

标签: mysql database deadlock database-deadlocks

我知道当两个或多个实体阻塞某些源时会发生死锁,而且它们都无法完成,因为它们是以循环方式阻塞源。

select语句是否会发生死锁。 select语句是否阻止资源。我相信插入或更新会阻止行,但不是非常肯定select语句。请指教。

1 个答案:

答案 0 :(得分:1)

使用InnoDB存储引擎(默认值),读取是非阻塞的 - 因此两个选择不能相互阻塞。 InnoDB是一个使用MVCC(多版本并发控制)的版本控制引擎,这意味着事务(A)将在某个时刻获取感兴趣的记录的副本 - 如果它修改然后提交数据,那么在此之后开始的任何事务commit将看到新副本,但是在A开始之后但在A提交之前的任何事务开始(B)之前开始的事务将看到A看到的副本。只有在其中一个事务修改数据时才会发生死锁(在行级别的InnoDB中发生锁定)。

有关详细信息,请参阅herehere。对于MyISAM表(我对此知之甚少!),请查看此处的比较或仅查看Google" MyISAM vs InnoDB" (129,000次点击。