如何在 mariadb 中关闭自动提交?

Posted

技术标签:

【中文标题】如何在 mariadb 中关闭自动提交?【英文标题】:How to turn off autocommit in mariadb? 【发布时间】:2016-09-07 10:20:12 【问题描述】:

我正在使用 mariasql 和 mariasql 的 mysql 工作台 IDE,但我无法禁用自动提交模式。如何关闭自动提交?

【问题讨论】:

【参考方案1】:

在 SQL 编辑器中有一个工具栏按钮,可以切换自动提交模式:

关闭自动提交将启用另外 2 个可用于启动和提交事务的蓝色按钮。

【讨论】:

【参考方案2】:

我将 XAMPP-VM 与 MariaDB 与 InnoDB 一起使用。无法使用 my.conf 禁用 autocommit,但是,我编辑了 mysql.server 文件(对于 XAMPP-VM,它位于 /opt/lampp/bin 文件夹中)并将此参数添加到启动

--autocommit=0

所以最后看起来是这样的

...
case "$mode" in
  'start')
    # Start daemon
    ...
      $bindir/mysqld_safe --autocommit=0 --datadir="$datadir" --pid-file="$mysqld_pid_file_path" "$@" &
    ...

它成功了。您可以在停止启动后使用它进行检查(重新启动不会应用更改,因为它在交换机中的不同路径上进行)

select *
from information_schema.global_variables
where variable_name = 'AUTOCOMMIT';

硬币的另一面是,如果您升级,那么您需要重复此操作。

希望,你可以采用这个解决方案/给你一些想法如何做到这一点!

【讨论】:

【参考方案3】:

您可以将会话的自动提交设置为 false :

SET autocommit = 0;

https://mariadb.com/kb/en/mariadb/server-system-variables/#autocommit

【讨论】:

每当我尝试使用 Node.js 插入数据时应用 SET autocommit=0 后,它会将数据插入数据库。并在 mysql Workbench 中显示数据。 改用 START TRANSACTION 进行测试。插入结果后执行 COMMIT 或 ROLLBACK。 是否有任何命令可以关闭自动提交,这样会影响 mariasql 和 mysql 工作台【参考方案4】:

我认为关闭autocommit是一个错误。

处理自动提交有3种方式:

autocommit=1 -- 所有语句都立即提交。这通常适合随意使用。

BEGIN ... COMMIT -- 在其中显式地将一组 SQL 语句括起来。通过拥有BEGIN,您会被提醒需要COMMIT

autocommit=0 ... COMMIT -- 我认为这很容易出错。您默认自动提交为 0,但随后忘记发出 COMMIT。然后你想知道为什么你的INSERTs 消失了。

【讨论】:

【参考方案5】:

我找到的唯一方法是在守护进程的启动命令中添加--autocommit=0

环境:

$ mariadb --version
mariadb  Ver 15.1 Distrib 10.5.6-MariaDB, for Linux (x86_64) using readline 5.1

$ grep PRETTY_NAME /etc/os-release 
PRETTY_NAME="Oracle Linux Server 7.9"

单行命令:

注意:您仍然需要手动添加--autocommit=0

$ vim /usr/lib/systemd/system/mariadb.service && systemctl daemon-reload && systemctl restart mariadb && mariadb -u root -e "show variables like '%autocommit%'"

分步命令:

    使用文本编辑器打开作业文件
$ vim /usr/lib/systemd/system/mariadb.service
    --autocommit=0 添加到ExecStart(对我来说是在#92)
ExecStart=/usr/sbin/mariadbd --autocommit=0 $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION
    重新加载守护进程
$ systemctl daemon-reload
    重启服务
$ systemctl restart mariadb
    检查autocommit变量的状态
$ mariadb -u root -e "show variables like '%autocommit%'"
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| autocommit             | OFF   |
...
+------------------------+-------+

【讨论】:

以上是关于如何在 mariadb 中关闭自动提交?的主要内容,如果未能解决你的问题,请参考以下文章

如何在对话框中关闭 jQuery 对话框?

04在 PR 中关闭 issue

如何阻止用户在 Javascript 中关闭窗口?

如何在 Visual Studio 中关闭括号/引号自动完成

jTDS 提交语句在 MSSQL 2008 中关闭未结束事务

如何使用 kubectl 命令在 Kubernetes 中关闭自动缩放?