提问者:小点点

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


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

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

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

# ... 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个答案

匿名用户

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

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