2015-02-05 45 views
1

我知道当两个或多个实体阻塞某些源时,发生死锁,并且它们都不能完成,因为它们以循环的方式阻止源。通过select语句导致数据库死锁

选择语句会发生死锁。 select语句是否阻塞资源?我相信插入或更新将阻止行,但不是很确定选择语句。请指教。

+0

所以也许想检查:http://stackoverflow.com/questions/917640/any选择无选择,不会导致锁定在MySQL ....这取决于 –

回答

1

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

欲了解更多信息,请参阅herehere。对于MyISAM桌面(关于它我知道的很少!),看看这里的比较,或者只是谷歌“MyISAM vs InnoDB”(129,000点击。