SET AUTOCOMMIT

说明

设置系统是否自动提交属性

语法

set_autocommit ::=

参数

TRUE

系统自动提交属性为真。每条语句对应一个事务并在语句结束时自动提交。

FALSE

系统自动提交属性为假。当执行DML或DDL语句或SET TRANSACTION之后,相当于在该语句之前输入BEGIN开始了一个事务。直到用户输入COMMIT或ROLLBACK时这个事务才算结束。

注解

自动提交是指后台自动提交一个事务,而不是自动开始一个事务。即无论是否指定自动提交,当用户开始发到后台一个语句,并且后台并未发现该用户处于一个活动事务中时,后台都会主动为用户开始一个事务。

这里所说的"用户"是对于后台而言的,即所有的前台,不分是前台的ODBC/JDBC还是最终用户应用程序或者交互式SQL。

另外,SET AUTOCOMMIT 命令不影响当前正在执行的语句或事务。

在默认情况下,系统的自动提交属性为真。

如果系统的自动提交属性为真,则,1). 当不在一个事务中时,每个 DML 或 DDL 语句对数据库产生的影响将马上生效;2). 当已经在一个事务中时,后台不会自动提交事务,将等待直到用户发出 COMMIT 为止。

如果系统的自动提交属性为假,则上一个事务之后的所有语句对数据库产生的影响直到输入 END 或 COMMIT 时才生效。而以下情况不会导致自动进入一个事务:1). 上个事务之后的第一条语句出错;2). 上个事务之后的第一条语句是 SET TRANSACTION 以外的 SET 语句、RESET 语句、SHOW 语句;3). 上个事务之后的第一条语句是事务相关的语句(COMMIT,END,ROLLBACK,ABORT);

示例

示例1: 设置自动提交参数

--  清理环境
DROP TABLE tab1 CASCADE;


--  创建表
CREATE TABLE tab1 (a INT);

--  设置自动提交参数 —— 自动提交
SET AUTOCOMMIT = TRUE;

--  插入数据
INSERT INTO tab1 VALUES(100);
INSERT INTO tab1 VALUES(200);


SELECT * FROM tab1 ORDER BY a;
A(int)      |
------------
100         |
------------
200         |
总数目:2


--  设置自动提交参数 —— 非自动提交
SET AUTOCOMMIT = FALSE;

INSERT INTO tab1 VALUES(200);


SELECT * FROM tab1 ORDER BY a;
A(int)      |
------------
100         |
------------
200         |
------------
200         |
总数目:3

--  回滚事务
ROLLBACK;


--  非自动提交的数据已不存在
SELECT * FROM tab1 ORDER BY a;
A(int)      |
------------
100         |
------------
200         |
总数目:2


--  重置自动提交参数
RESET AUTOCOMMIT;

--  删除表
DROP TABLE tab1;