当前位置: 首页 > 知识库问答 >
问题:

当连接在没有提交或回滚的情况下关闭时,mysqli事务会发生什么?

权浩邈
2023-03-14

相关问题,但不是我想知道的,因为我对PHPmysqlilib/函数的具体行为很好奇:

  • 当连接在事务中间关闭时会发生什么?
  • 当连接关闭时,未提交的事务会发生什么?

假设我有这样的代码(不管它是好的还是坏的实践):

php prettyprint-override"># ... some code

$conn = new mysqli('localhost', 'widget-manager', 'secret-widgets', 'widgets');
$conn->begin_transaction(MYSQLI_TRANS_START_READ_WRITE);
if (false) {
    $sql = "UPDATE widgets SET widget_num = 1 WHERE widget_id = 5";
    $res = $conn->query($sql);
    if ($res) {
        $conn->commit();
    } else {
        $conn->rollback();
    }
}
$conn->close();

# ... some more code

包含提交和回滚的if将被跳过,而mysqli连接将在事务启动后但在调用提交或回滚之前关闭。

该事务是否也会立即被销毁/结束/不管什么专有名词,或者它会保留下来并可能阻止来自其他服务的其他查询?

共有1个答案

戚鸿福
2023-03-14

如果客户端断开连接,MySQL服务器将清理会话。这将回滚任何未提交的事务、释放行锁和表锁、移除临时表和会话变量等。

使用哪种客户机接口(mysqli vs.PDO vs.Java vs.anything)没有区别。

 类似资料:
  • 我们在Glassfish中使用无状态会话bean。我有一个问题。默认情况下,我们的方法支持事务,也就是说,事务在业务方法开始点启动,并在退出点提交(或回滚)。假设我有这样的代码: 所以在A行发生的情况是,我没有从字面上关闭连接,它只是返回到连接池,但该方法的事务尚未提交。它只在B行完成后完成。但是由于连接返回到池,这意味着其他人可以在该方法提交(或回滚)之前使用相同的连接启动事务。 那么,接下来会

  • 假设我有一个普通的应用程序,其中我正在使用ApplicationContext ApplicationContext=new FileSystemXmlApplicationContext(“bean.xml”)创建一个Spring应用程序上下文 现在,假设在这个bean.xml有Spring bean的bean定义,所以当我创建应用程序上下文时,Spring容器将为这个实例化和初始化一个对象。

  • 在经典ASP中,如果页面遇到未捕获的异常并在提交/回滚之前停止,连接事务会发生什么情况? 例如: 鉴于事务正在进行中,是否会中止或提交?或者,当事务返回到连接池时,连接是否会维护该事务?

  • 问题内容: 我有三个问题。 为了解释,我正在查看某人的代码,并注意到有时没有关闭。通常,Eclipse会警告您这是潜在的内存泄漏(我已修复)。但是,在Callable内部类中,没有警告。 编写代码的人都是经验丰富的Java开发人员,所以我首先想到的是它是故意的…但是可能是他们在编写代码时只是匆忙而忽略了它。 我的问题是: Eclipse为什么不突出显示这一点(可以通过以下问题的答案来回答)? 如果

  • 问题内容: 我有一种方法可以做很多事情。其中包括进行大量插入和更新。因此宣布… 它的工作完全符合预期,我对此没有任何问题。但是在某些情况下,尽管没有异常,但我还是想强制回滚…目前,当我遇到合适的条件时,我正在强制异常,但这很丑陋,我不喜欢它。 我可以以某种方式积极地调用回滚吗?异常调用它…我在想也许我也可以。 问题答案: 在Spring Transactions中,您使用。 您在这里遇到的问题是您