Mysql 子查询锁定

Mysql subquery locking

如果我有这样的查询:

UPDATE table_x SET a = 1 WHERE id = ? AND (
    SELECT SUM(a) < 100 FROM table_x
)

我需要锁定 table 还是 table_x 会自动锁定,因为它是一个子查询?

假设这是 innodb table,您将拥有行级锁定。因此,即使它们同时发生 100 个,也只有一个事务能够获取这些行的锁并在下一个事务发生之前完成处理。为更新和子查询处理事务的方式没有区别。对于 innodb 引擎,这都是一个事务,而不是两个单独的事务。

如果您想在 运行 查询时查看幕后发生的情况,请在查询 运行ning 时在命令行中键入 'show engine innodb status'。

Here 很好地说明了所有输出的含义。

如果您想了解更多关于 Innodb 和行级锁定的信息,请关注 link here