【问题标题】:Is there a way to get the default value of autocommit in MySQL?有没有办法在 MySQL 中获取 autocommit 的默认值?
【发布时间】:2015-01-10 20:24:53
【问题描述】:

我只是想知道是否可以这样做?例如,如果我要做这样的事情:

$this->db->autocommit(false);

但后来我想把它设置回它的默认值;我不能只是假设它默认为 true 并这样做:

$this->db->autocommit(true);

如果可能,我想将其重置为默认值;或者其他人在希望单个查询自动提交时会做什么?你总是跑步吗:

$this->db->autocommit(true);

...在查询之前确保autocommit 处于打开状态?

【问题讨论】:

    标签: php mysql mysqli transactions autocommit


    【解决方案1】:

    http://php.net/manual/en/mysqli.autocommit.php

    To determine the current state of autocommit use the SQL command SELECT @@autocommit.
    

    确定它是否打开以及是否打开它似乎很愚蠢。

    另一种方法是使用:

    SHOW VARIABLES WHERE Variable_name='autocommit';
    

    此外,其他变量中的自动提交是基于每个连接的,您将自动提交设置为 true 不会影响任何其他连接。找到默认值的唯一方法是在建立连接时检查是否正确(在更改状态之前)。

    【讨论】:

    • 我不想获取当前状态,我想获取默认值。在我看来,最好在更改某些内容后将其恢复到正常状态,否则每次运行查询时都必须始终打开/关闭它,以确保它是您想要的。
    • 更新了更多信息。
    • 谢谢。是的,我知道这是基于每个连接的,但我想如果你在一个地方将其更改为 false,然后在另一个地方代码假定为默认值,那么你可能会遇到问题.....也许是最好的方法是总是在所有相关查询之前设置它!?
    • 是的,这将是最简单的方法,但如果您想非常安全,您可以在更改之前跟踪它是什么,然后再将其更改回来。这样,无论周围的代码期望它是什么,它都会是。
    • "SHOW VARIABLES" 在最近的 mysql 版本 (>5.6.x) 上不起作用,所以 "SELECT @@autocommit" 是唯一的方法。为了向后兼容,我使用“SELECT @@autocommit as Value”,所以无论mysql版本是什么,我都可以读取字段“Value”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 2016-07-16
    • 2023-02-14
    • 2022-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多