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;