达梦数据库开启自动提交

达梦数据库的自动提交(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
相关推荐
元宝骑士19 分钟前
深度解析 ROW_NUMBER() 窗口函数:从入门到实战避坑指南
后端·mysql
段小二1 小时前
Token 费用失控、VIP 用户体验一样烂:Context Engineering 才是关键
人工智能·后端
Nyarlathotep01131 小时前
并行设计模式(3):Future模式
java·后端
秋风不问归客1 小时前
Springboot面试全面整理
spring boot·后端·面试
文心快码BaiduComate1 小时前
Comate搭载GLM-5.1:长程8H,对齐Opus 4.6
前端·后端·架构
我叫黑大帅1 小时前
PHP中的官方操作数据库PDO
后端·面试·php
用户92239610327281 小时前
不用 nohup、不用 sshpass!rsync 后台传输 + 断 SSH 不中断的原生玩法
后端
青柠代码录2 小时前
【SpringBoot】过滤器
后端
元宝骑士2 小时前
MySQL联表查询优化实战:小表驱动大表的联合索引设计
后端·mysql
用户69371750013842 小时前
Android 开发,别只钻技术一亩三分地,也该学点“广度”了
android·前端·后端