mysql事务与锁

mat*_*ang 6 mysql transaction

我有一个关于 MySQL 锁定和事务管理的问题。我的问题是 ..mysql 是否锁定了我在事务中执行选择/更新的元组/表?

Shl*_*ach 6

使用 MyISAM,您可以使用concurrent_insert=2优化,其中 anINSERT不会阻止现有SELECT语句或新语句(但会阻止任何其他语句)。

使用 InnoDB,规则是:

  • SELECT从不阻塞
  • 一行上的UPDATEDELETE将在该行上加锁。但这即使在SELECT编辑同一行时也可以工作。
  • 同一行上的第二个更新(在并发事务上)将阻塞,直到第一个更新被提交或回滚。
  • INSERTs 更复杂:如果表中有AUTO_INCREMENT,则该表被锁定(尽管如果不竞争 ,则允许其他并发操作AUTO_INCREMENT
  • 一些并发INSERTs 可能会相互阻塞,因为锁定是在聚集索引上完成的。
  • DELETEUPDATE范围上的s, s 也更复杂,并且由于聚集索引上的锁可能涉及更多块。

这可能不是一个完整的列表,但应该能让您大致了解一下。