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

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

【问题讨论】:

    标签: javascript node.js mysql-workbench mariadb mariasql


    【解决方案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%'"
          

          分步命令:

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

          【讨论】:

            猜你喜欢
            • 2012-03-27
            • 1970-01-01
            • 1970-01-01
            • 2013-07-14
            • 2011-01-17
            • 1970-01-01
            • 1970-01-01
            • 2013-09-07
            • 1970-01-01
            相关资源
            最近更新 更多