小编典典

在MySQL中显示未结交易

mysql

我没有提交就做了一些查询。然后应用程序被停止。

如何显示这些未清交易并提交或取消交易?


阅读 267

收藏
2020-05-17

共1个答案

小编典典

如何显示这些未清交易并提交或取消交易?

没有打开的事务,MySQL将在断开连接时回滚该事务。
您无法提交交易(IFAIK)。

您使用显示线程

SHOW FULL PROCESSLIST

参见:http :
//dev.mysql.com/doc/refman/5.1/en/thread-
information.html

这将无济于事,因为您无法从断开的连接中提交事务。

当连接断开时会发生什么
从MySQL文档:http :
//dev.mysql.com/doc/refman/5.0/en/mysql-
tips.html

4.5.1.6.3。禁用MySQL自动重新连接

如果mysql客户端在发送语句时失去与服务器的连接,它将立即自动尝试重新连接一次到服务器并再次发送该语句。 但是
,即使mysql成功重新连接,您的第一个连接也已结束,并且先前的所有会话对象和设置 都将丢失
:临时表,自动提交模式以及用户定义的会话变量。同样, 任何当前事务都会回滚

此行为对您可能很危险,如以下示例所示,在您不知道的情况下在第一条和第二条语句之间关闭并重新启动服务器:

另请参阅:http :
//dev.mysql.com/doc/refman/5.0/en/auto-
reconnect.html

如何诊断和解决此问题
要检查自动重新连接:

如果确实发生了自动重新连接(例如,由于调用mysql_ping()),则没有明确的指示。要检查是否重新连接,请先调用mysql_thread_id()以获得原始连接标识符mysql_ping(),然后mysql_thread_id()再调用,然后再次调用以查看标识符是否已更改。

确保将最后一个查询(事务)保留在客户端中,以便在需要时可以重新提交。
并禁用自动重新连接模式,因为这样做很危险,请改为执行自己的重新连接,这样您就可以知道何时发生丢弃并可以重新提交该查询。

2020-05-17