达梦数据库的自动提交(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