我正在为 mariasql 使用 mariasql 和 mysql 工作台 IDE,但我无法禁用自动提交模式。如何关闭自动提交?
5 回答
我将 XAMPP-VM 与 MariaDB 和 InnoDB 一起使用。无法使用 my.conf 禁用自动提交,但是,我编辑了 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';
硬币的另一面是,如果您升级,那么您需要重复此操作。
希望,你可以采用这个解决方案/给你一些想法如何去做!
我认为关闭是错误的autocommit
。
有 3 种处理自动提交的方法:
autocommit=1
-- 所有语句都立即提交。这通常适合随意使用。BEGIN
...COMMIT
-- 在其中显式地将一组 SQL 语句括起来。通过拥有BEGIN
,您会被提醒COMMIT
需要 a 。autocommit=0
...COMMIT
- 我认为这很容易出错。您默认自动提交为 0,但随后忘记发出COMMIT
. 然后你想知道你为什么INSERTs
消失了。
您可以将会话的 autocommit 设置为 false :
SET autocommit = 0;
https://mariadb.com/kb/en/mariadb/server-system-variables/#autocommit
我发现的唯一方法是添加--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 |
...
+------------------------+-------+