用过oracle或mysql的人都知道,做一个dml语句,如果发现做错了,还可以rollback,但在Kingbase ksql 中,如果执行一个dml,没有先运行begin; 的话,一执行完就马上提交了,不能回滚,(因为默认自动提交是开启的)这样容易导致误操作的发生,有没有什么办法避免这个风险呢?答案是关闭自动提交。
在KingabseESV8R6中 autocommit功能默认是开启的。
test=# \echo :AUTOCOMMIT; on;
在被设置为on
(默认)时,每一个 SQL 命令在成功完成时会被自动提交。在这种模式中要推迟提交,必须输入一个BEGIN
或者START TRANSACTION
SQL 命令。当被设置为off
或者被重置时,在显式发出COMMIT
或者END
之前,SQL 命令不会被提交。
test=# \set AUTOCOMMIT off; test=# \echo :AUTOCOMMIT; off;
这个简单的命令禁用会话的自动提交。关闭自动提交后,dml可以回滚。当退出会话就会失效。注意ddl的回滚功能无关自动提交功能。
用root用户找到ksqlrc.sample文件
将sample 拷贝到 数据库配置目录etc下并改名为ksqlrc
在ksqlrc文件中加入\set AUTOCOMMIT off 注意AUTOCOMMIT要大写
并重启数据库服务后。查看已经关闭了自动提交功能