有没有办法在 MySQL 中获取 autocommit 的默认值?

Posted

技术标签:

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

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

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

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

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

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

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

...在查询之前确保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”。

以上是关于有没有办法在 MySQL 中获取 autocommit 的默认值?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法将对象存储在 mySQL 数据库中?

MySQL:即使没有日期行,有没有办法获取两个日期之间所有日期的数据?

在java中从mysql获取表元数据

有没有办法在mysql的where子句中使用像min这样的sql函数作为值?

在 MySQL 中使用 SELECT 语句获取表名

在MySQL中获取准确的重复行