MySQL事务问题 - 调用中的操作顺序

MySQL Transaction Question - Order of operation in calling

提问人:Floobinator 提问时间:10/30/2023 最后编辑:Floobinator 更新时间:10/31/2023 访问量:19

问:

更新:MySQL版本8.0.34

我的理解是MySQL在操作上是纯同步的,当连接调用存储过程时,数据库不会从该调用中“返回”(无论它有多深 - A>B>C>D),直到它完成,并且数据库不会执行任何其他SP(与该连接)直到它完成。

令我感到困惑的是,当我在 SP 开始时拍摄快照时,它将显示之前的 SP 调用仍在“运行”。这对我来说毫无意义。注意:我说的是同一个连接(不是多个连接 - 所以只是查询同一个会话)。information_schema.INNODB_TRX

当调用新的 SP 时,如何从上一个调用中运行事务?只是桌子延迟,还是我不知道发生了什么其他事情?information_schema.INNODB_TRX

请注意,正在运行的事务几乎总是对存储过程(不同的存储过程)的 CALL 调用。

为清楚起见,更新

  1. 调用第一个 ROOT 存储过程 A。B、C、D等。
  2. 调用第二个 ROOT 存储过程 E。事务日志显示 CALL 事务 RUNNING 从过程 A 调用。
MySQL 存储过程 事务

评论

1赞 Bill Karwin 10/30/2023
您的意思是您调用了第二个过程,仍然在较早开始的单个事务的上下文中,并且您想知道为什么会这样?确实,您可以在一个事务中调用多个过程或运行许多其他 SQL 查询。这是一个惊喜吗?
0赞 Bill Karwin 10/30/2023
我尝试测试,但我无法重现您描述的内容。您能确认您的 MySQL 实例上的内容吗?我正在使用 8.2.0。SELECT VERSION();
0赞 Barmar 10/31/2023
事务锁定表和行,它们不会在过程级别锁定。
0赞 Floobinator 10/31/2023
嘿@BillKarwin我更新了上面的内容。我很困惑,因为我的理解是MySQL必须存在“根”SP调用以及与之关联的所有事务,然后才能执行另一个SP - 是吗?还是没有...?
0赞 Bill Karwin 10/31/2023
是的,每个会话都是单线程的。给定会话没有异步查询或调用。甚至触发器也是同步运行的。

答: 暂无答案