Mysql 锁定 3 个连续的相互依赖的查询

Mysql Locking 3 consecutive interdependent queries

抱歉,我没有真正的密码。但只是一个问题的解释。 我想了解解决此问题的最佳方法是什么。 我有 3 个查询:

到目前为止一切顺利。我的 3 个查询已正确执行。 现在假设这 3 个查询是在 API 调用中执行的。现在发生的情况是,如果多个 API 调用同时执行得太快,第二个 COUNT 查询检索到一个错误的值,因此第三个 UPDATE 也有一个错误的值。 尽管如此,我在 INSERT 查询上遇到了死锁,因为在进行 INSERT 时,SELECT COUNT 试图在第二个 api 调用中同时读取。

我的问题是解决此类问题的最佳方法是什么。 我不需要代码。我只想了解最好的方法。 例如,我需要锁定所有 table 吗?

不清楚你在做什么,但这可能会更快:

CREATE TEMPORARY TABLE t ...;   -- all columns except count
INSERT IN t ...;   -- the incoming data

SELECT COUNT(*) INTO @ct FROM t;

INSERT INTO real_table
    (...)         -- including the count-column last
    SELECT ..., @ct FROM t;  -- Note how count is tacked on last