【问题标题】:Database deadlock by select statementselect语句导致数据库死锁
【发布时间】:2015-02-05 04:01:45
【问题描述】:

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

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

【问题讨论】:

标签: mysql database deadlock database-deadlocks


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    相关资源
    最近更新 更多