select 语句导致数据库死锁
Database deadlock by select statement
我知道当两个或多个实体阻塞某些源时会发生死锁,并且其中 none 能够完成,因为它们以循环方式阻塞源。
select 语句会发生死锁吗? select 语句是否阻塞了资源。?我相信插入或更新会阻塞该行,但对于 select 语句不是很确定。请指教
使用 InnoDB 存储引擎(默认),读取是非阻塞的 - 因此两个选择不能相互阻塞。 InnoDB 是一个使用 MVCC(多版本并发控制)的版本控制引擎,这意味着事务 (A) 将在某一时刻及时获取感兴趣的记录的副本——如果它修改并提交数据,则任何在此之后开始的事务commit 将看到新副本,但是在此之前开始的任何事务在 A 开始之后但在 A 提交之前开始 (B) 的事务将看到 A 看到的副本。仅当其中一个事务修改数据时才会发生死锁(在 InnoDB 中以行级为基础进行锁定)。
有关详细信息,请参阅 here and here. For MyISAM tables (about which I know very little!), check out the comparison here or just Google "MyISAM vs InnoDB”(129,000 次点击。
我知道当两个或多个实体阻塞某些源时会发生死锁,并且其中 none 能够完成,因为它们以循环方式阻塞源。
select 语句会发生死锁吗? select 语句是否阻塞了资源。?我相信插入或更新会阻塞该行,但对于 select 语句不是很确定。请指教
使用 InnoDB 存储引擎(默认),读取是非阻塞的 - 因此两个选择不能相互阻塞。 InnoDB 是一个使用 MVCC(多版本并发控制)的版本控制引擎,这意味着事务 (A) 将在某一时刻及时获取感兴趣的记录的副本——如果它修改并提交数据,则任何在此之后开始的事务commit 将看到新副本,但是在此之前开始的任何事务在 A 开始之后但在 A 提交之前开始 (B) 的事务将看到 A 看到的副本。仅当其中一个事务修改数据时才会发生死锁(在 InnoDB 中以行级为基础进行锁定)。
有关详细信息,请参阅 here and here. For MyISAM tables (about which I know very little!), check out the comparison here or just Google "MyISAM vs InnoDB”(129,000 次点击。