达梦数据库开启自动提交

达梦数据库的自动提交(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
相关推荐
名字还没想好☜11 小时前
Spring Boot 优雅停机实战:等在途请求处理完再退出,配合 K8s preStop 别丢请求
java·后端·spring
摇滚侠11 小时前
《Spring Boot 3:高级与架构设计》第 1 章 Bean 与 BeanDefinition 个人理解 2
java·spring boot·笔记·后端
IT_陈寒12 小时前
Redis主从切换竟让业务卡了3秒?这个坑我替你踩了
前端·人工智能·后端
右耳朵猫AI12 小时前
Java周刊2026W38 | Micronaut 修补三漏洞、JDK 27 提速 54%、Jetty 修复抖动测试
java·后端·spring
步行cgn12 小时前
BeanFactory 与 FactoryBean 的区别:面试深度解析
java·后端·spring
mldong12 小时前
一套审批流要写多少代码:13 个框架的接入 diff 我数了一遍,最少 422 行,最多 1798 行
后端·架构
GreenTea21 小时前
GrokBot 核心成员 Lauren Tan:每月交付 2000 个 PR 的人,是怎么用 AI 的
前端·后端·架构
码事漫谈21 小时前
FDE:一个缩写,两种命运
后端
名字还没想好☜1 天前
Go context.AfterFunc 实战(Go 1.21):context 一取消就自动跑清理,告别手写 goroutine 监听 Done
后端·golang·go
明月_清风1 天前
为什么最近开始关注 JEV?几个实战案例告诉你答案
人工智能·后端