达梦数据库开启自动提交

达梦数据库的自动提交(AUTOCOMMIT)会话级别的参数,用于控制DML语句(INSERT/UPDATE/DELETE)是否自动提交事务(DDL语句如CREATE/ALTER默认强制自动提交,不受该参数影响)。以下是完整的设置方法、验证方式和注意事项,覆盖交互式/脚本/持久化场景:

一、核心说明

  • 达梦默认状态:AUTOCOMMIT = OFF(关闭),执行DML后需手动COMMIT才能提交事务;
  • 作用范围:SET AUTOCOMMIT仅对当前disql会话生效,退出后恢复默认;
  • 生效对象:仅影响DML(INSERT/UPDATE/DELETE/MERGE),DDL(CREATE/ALTER/DROP)/DCL(GRANT/REVOKE)始终自动提交。

二、方法1:交互式disql中设置(临时,当前会话)

登录disql后,通过SET AUTOCOMMIT命令手动开启/关闭自动提交,这是最常用的方式。

步骤1:查看当前自动提交状态

sql 复制代码
-- 方式1:SHOW命令(推荐,直观)
SQL> SHOW AUTOCOMMIT;
-- 输出示例(关闭状态):
autocommit = off

-- 方式2:查询系统变量(兼容MySQL/Oracle)
SQL> SELECT @@AUTOCOMMIT;
-- 输出:1=开启,0=关闭
LINEID     @@AUTOCOMMIT
---------- ------------
1          0

-- 方式3:查询会话上下文
SQL> SELECT SESSION_CONTEXT('AUTOCOMMIT');

步骤2:设置自动提交(开启/关闭)

sql 复制代码
-- 开启自动提交(两种写法等价)
SQL> SET AUTOCOMMIT ON;
-- 或
SQL> SET AUTOCOMMIT 1;

-- 关闭自动提交(两种写法等价)
SQL> SET AUTOCOMMIT OFF;
-- 或
SQL> SET AUTOCOMMIT 0;

步骤3:验证自动提交是否生效

sql 复制代码
-- 1. 开启自动提交后,执行DML无需手动COMMIT
SQL> SET AUTOCOMMIT ON;
SQL> INSERT INTO test (id, name) VALUES (10, '自动提交测试');  -- 执行后立即提交

-- 2. 新开disql会话,查询数据(能查到则生效)
-- 新会话执行:
SQL> SELECT * FROM test WHERE id=10;
-- 输出:能看到id=10的记录,说明自动提交生效

-- 3. 关闭自动提交后,执行DML需手动COMMIT
SQL> SET AUTOCOMMIT OFF;
SQL> INSERT INTO test (id, name) VALUES (11, '手动提交测试');
-- 新开会话查询:查不到id=11的记录(事务未提交)
-- 手动提交后才能查到:
SQL> COMMIT;

三、方法2:脚本/非交互式场景设置(批量执行)

若通过disql -f执行SQL文件,需在脚本开头添加SET AUTOCOMMIT命令,确保批量执行时自动提交生效。

示例1:SQL文件中内置自动提交设置

sql 复制代码
-- test_script.sql(开头设置自动提交)
SET AUTOCOMMIT ON;  -- 开启自动提交
INSERT INTO test VALUES (20, '脚本自动提交1');
INSERT INTO test VALUES (21, '脚本自动提交2');
UPDATE test SET name='更新测试' WHERE id=20;
-- 无需手动COMMIT,每条DML都会自动提交

执行脚本:

bash 复制代码
disql SYSDBA/SYSDBA -n UTF8 -f /data/test_script.sql

示例2:disql命令行先设置自动提交(非交互式)

通过-c参数先执行SET AUTOCOMMIT,再执行业务SQL:

bash 复制代码
# 先开启自动提交,再执行插入(一行命令完成)
disql SYSDBA/SYSDBA -c "SET AUTOCOMMIT ON; INSERT INTO test VALUES (30, '命令行自动提交');"

四、方法3:持久化自动提交(每次登录disql自动开启)

若希望每次登录disql都默认开启自动提交,可修改disql的配置文件dmdisql.ini,实现持久化生效。

步骤1:找到dmdisql.ini配置文件

  • 达梦安装目录下:DM_HOME/bin/dmdisql.ini(DM_HOME为达梦安装根目录,如/dm8);
  • 若未找到,可在disql中执行SELECT GET_INI_PATH('DISQL');获取配置文件路径。

步骤2:修改配置文件

编辑dmdisql.ini,添加/修改AUTOCOMMIT参数:

ini 复制代码
# dmdisql.ini
[DISQL]
AUTOCOMMIT = ON  # 全局默认开启自动提交(可选值:ON/OFF/1/0)
LINESIZE = 200   # 保留其他原有配置
PAGESIZE = 50
相关推荐
锦木烁光2 小时前
从零构建工业级流水号引擎:Spring Boot 2.7 + Redis 原子递增 + AntD Pro 全栈实战
后端
jolimark2 小时前
Spring Boot 集成 Kettle
java·spring boot·后端
用户7344028193422 小时前
Spring Boot使用@Async实现异步调用:ThreadPoolTaskScheduler线程池的优雅关闭
后端
sthnyph2 小时前
Spring Framework 中文官方文档
java·后端·spring
zb200641202 小时前
Spring Boot 实战篇(四):实现用户登录与注册功能
java·spring boot·后端
青柠代码录3 小时前
【MySQL】事务:事务的隔离级别
后端
分享牛3 小时前
Operaton入门到精通22-Operaton 2.0 升级指南:Spring Boot 4 核心变更详解
java·spring boot·后端
jinanmichael3 小时前
SpringBoot 如何调用 WebService 接口
java·spring boot·后端
深蓝轨迹3 小时前
吃透 Spring Boot dataSource与Starter
java·spring boot·笔记·后端